[英]PHP autoloader cant find necessary class
所以我是第一次學習 PHP MVC,我想出了一個術語——自動加載所有需要的 .php 文件。
所以我在網上搜索了一些示例,並使用spl_autoload_register
方法制作了一個自動加載文件,調用了一個匿名方法來require_once
所有需要的文件。 我不知道出了什么問題,但它似乎不起作用。
所以我做的spl_autoload_register
方法是:
spl_autoload_register(function($className){
if(is_file('libraries/' . $className . '.php')){
echo 'libraries/' . $className . '.php';
require_once 'libraries/'. $className . '.php';
}
});
項目中的文件結構可在此處獲得: https ://prnt.sc/gPaVkLZRsPpj
如果我注釋掉spl_autoload_register
方法並一個一個地要求所有必要的文件,它工作得很好。
require_once 'libraries/Core.php';
require_once 'libraries/Controller.php';
require_once 'libraries/Database.php';
我試圖在其中進行自動加載的文件如下所示:
<?php
require_once '../app/autoload.php';
// Init Core.php
$init = new Core();
我得到的錯誤信息是:
Fatal error: Uncaught Error: Class "Core" not found in C:\xampp\htdocs\farkops-mvc\public\index.php:5 Stack trace: #0 {main} thrown in C:\xampp\htdocs\farkops-mvc\public\index.php on line 5
我已經通過互聯網搜索,嘗試了spl_autoload_register
的其他實現,但它們都不起作用。
有人可以幫我解決這個問題嗎? :)
所以問題是(正如@Lawrence Cherone 在評論中提到的那樣),自動加載器在當前工作目錄的上下文中被調用,調用該自動加載器的文件位於該目錄中。
所以我做了一些改變。
APPROOT
,其中包含指向app
文件夾的鏈接(所有核心文件的根文件夾)define('APPROOT', dirname(dirname(__FILE__)));
就我而言,APPROOT 是C:\xampp\htdocs\mvc\app
spl_autoload_register(function($className){
if(is_file(APPROOT . '/libraries/' . $className . '.php')){
require_once APPROOT . '/libraries/' . $className . '.php';
}
});
現在,自動加載器可以訪問C:\xampp\htdocs\mvc\app\libraries\Core.php
等文件夾中的文件管理器而不會出現任何錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.