[英]autoload and namespace
假設我在相同的命名空間中有類:
目錄 :
(文件夾)一個
- 一個.php
(文件夾) b
- b.php
- php
我們使用命名空間和__autoload
如您所見:在文件夾b\\b.php
:
<?php
namespace b;
use b as x;
function __autoload($clsName){
$clsName='../'.str_replace('\\', '/', $clsName).'.php';
require_once $clsName;
}
class b{
function __construct(){
print("b file<hr/>");
}
}
$t=new x\c(); // line 13
?>
並在文件夾b\\c.php
:
<?php
namespace b;
class c{
function __construct(){
print("c file<hr/>");
}
}
?>
當我們定義$t=new x\\c
, __autoload
不會調用! 請幫我 :(
錯誤信息:
Fatal error: Class 'b\c' not found in C:\xampp\htdocs\project\TEST\b\b.php on line 13
您尚未定義自動加載器。 PHP 查找__autoload
(或\\__autoload
- 在全局命名空間中定義的函數),而您只定義了\\b\\__autoload
(是的,函數被命名為!)
如何修復:將__autoload
聲明移到命名空間之外
更好的修復:您應該使用spl_autoload_register
很難看出到底出了什么問題。 從錯誤的外觀來看,似乎沒有調用__autoload()
函數。 如果是這樣,我希望require_once
語句失敗,並出現錯誤,提示未找到文件,或類似的錯誤。
您可以嘗試在__autoload()
函數中放入一些調試語句來查看發生了什么,包括$clsName
變量的var_dump
。
可能值得注意的是PHP 手冊中出現的有關自動加載的以下消息:
spl_autoload_register()為自動加載類提供了更靈活的替代方法。 出於這個原因,不鼓勵使用__autoload()並且將來可能會被棄用或刪除。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.