請問我有二個類別 Father 及 Child 都是放在 /class/model 資料夾內,
我有設定自動加載 spl_autoload_register 函數,
各類別定義如下:
/class/model/Father.php
namespace model;
Class Father {
...
}
/class/model/Child.php
namespace model;
Class Child extends \model\Father {
...
}
我打開 Father.php 不會報錯
但打開 Child.php 卻會出現以下錯誤:
Fatal error: Class 'model\Father' not found in ...省略
而如果在其他頁面實例化類別都不會報錯
$Father = new \model\Father();
$Child = new \model\Child();
請問為何子類別 Child 會報錯,而父類別 Father 卻不會?
我要怎麼寫,打開 Child.php 時才不會報錯?
謝謝
我猜你是用 composer autoload 的 psr-4
如果是的話
會不會報錯主要是因為有沒有引用 autoload.php
如果沒有引用的話,php 不知道你的 namespace 要去哪個資料夾找檔案
通常寫 class 並不會直接引用 autoload.php
要測試的話就另外寫一個 php,引用 autoload.php 後再測試
我是用這個方式
function class_loader($name) {
if (class_exists($name) || interface_exists($name)) {
return;
}
$name = str_replace("\\", '/', $name);
if (file_exists(REQUIRE_ROOT . "/class/{$name}.php")) {
require(REQUIRE_ROOT . "/class/{$name}.php");
}
return;
}
spl_autoload_register('class_loader');
在其他頁面實例化都沒問題
$Child = new \model\Child();
但直接用瀏覽器打開 /class/model/Child.php 會錯誤
Fatal error: Class 'model\Father' not found in ...省略
不知道為何?
Child.php 應該沒有 spl_autoload_register
那段程式碼吧
所以當他需要 Father 時,不知道要去哪邊找