訪問不存在的類時會怎麼樣
校驗程式碼
<?php
function __autoload($className) {
echo ("from autoload:" . $className . PHP_EOL);
}
spl_autoload_register(function ($className) {
echo ("from spl - 1:" . $className . PHP_EOL);
});
spl_autoload_register(function ($className) {
echo ("from spl - 2:" . $className . PHP_EOL);
});
$notExist = new AnotherNotExist();
要點說明
- 方框1:
__autoload()
函式已不建議使用,推薦使用程式碼中的spl_autoload_register()
。__autoload()
的作用是引入沒有找到的類,它接受的引數,即已知的條件是這個類的類名,所以引入的核心根據類名找到類檔案所在目錄,從而引入。為什麼不使用__autoload()
呢,因為__autoload()
這個函式全域性只能定義一次,如果都在裡面定義類名和類檔案目錄的關係,這個函式將十分臃腫,因此 PHP5 開始建議使用spl_autoload_register()
進行註冊。 - 方框2:當訪問不存在的類時,可以看到,走到了
spl_autoload_register()
函式(方框 2 輸出了想要訪問的類名)。因為程式碼中既有spl_autoload_register()
,也有__autoload()
所以只訪問了spl_autoload_register()
,只有__autoload()
時就會訪問__autoload()
。
本作品採用《CC 協議》,轉載必須註明作者和本文連結