Ok !!!現在,我覺得爲什麼spl_autoload_register()不能加載類。PHP當命名空間使用時,spl_autoload_register無法加載需要範圍的類
我的文件夾結構是這樣的..
應用
- 控制器
- 的welcome.php
- 控制器
系統
- 核心
- BaseController.php
- Load.php
- 核心
的index.php
我BaseController.php代碼
<?php
namespace system\core;
class BaseController {
public function __construct() {
spl_autoload_register(array($this, 'loader'));
}
private function loader($className) {
$className = ltrim($className, '\\');
$fileName = '';
$namespace = '';
if ($lastNsPos = strrpos($className, '\\')) {
$namespace = substr($className, 0, $lastNsPos);
$className = substr($className, $lastNsPos + 1);
$fileName = str_replace('\\', DIRECTORY_SEPARATOR, $namespace) . DIRECTORY_SEPARATOR;
}
$fileName .= str_replace('_', DIRECTORY_SEPARATOR, $className) . '.php';
require $fileName;
}
}
我Load.php代碼
<?php
namespace system\core;
class Load {
public function view()
{
echo "Method for loading view";
}
}
我的welcome.php代碼
<?php
class Welcome extends system\core\BaseController {
public function index()
{
$obj_load = new Load();
$obj_load->view();
}
}
我的index.php代碼
<?php
error_reporting(E_ALL);
ini_set('display_errors', '1');
require_once "system/core/BaseController.php";
require_once "application/controller/welcome.php";
$welcome = new welcome();
echo $welcome->index();
當我執行此代碼( index.php)我得到以下錯誤...
Fatal error: Class 'Load' not found in /var/www/nut/test/application/controller/welcome.php on line 5
但是,如果我從Load.php中刪除命名空間,我沒有得到任何錯誤。我無法理解爲什麼該名稱空間(用於Load.php)創建錯誤。
任何想法...
問候
你的類名是'system \ core \ Load';你正在嘗試加載''system/core /'.$ className。 '.php';'計算出一個名爲'system/core/system \ core \ Load.php'的文件.... –
您的自動加載器應該將類名中的命名空間分隔符轉換爲文件夾分隔符,然後使用這些分隔符試圖硬編碼他們 –
@MarkBaker我刪除了我的自動加載程序代碼,現在使用PHP-FIG示例代碼顯示在此鏈接 - > http://www.php-fig.org/psr/psr-0/ 但是,仍然我得到同樣的錯誤。 – mi6crazyheart