我有我的自動加載一個問題:PHP自動加載磁帶機:忽略不存在包括
public function loadClass($className) {
$file = str_replace(array('_', '\\'), '/', $className) . '.php';
include_once $file;
}
正如你所看到的,這是很簡單的。我只是推斷出這個類的文件名並嘗試包含它。我雖然有一個問題;當試圖加載一個不存在的類時,我得到一個異常(因爲我有一個拋出異常的錯誤處理程序)。這很不方便,因爲當您在不存在的類上使用class_exists()時它也會被觸發。你不想在那裏發生異常,只是返回一個「假」。
我在前面加入了一個@(禁止所有錯誤),解決了這個問題。然而,這樣做的一大缺點是,這個包含的任何分析器/編譯器錯誤(這是致命的)都不會出現(即使在日誌中也是如此),導致很難發現錯誤。
什麼是同時解決這兩個問題的最佳方法?最簡單的方法是將包括在自動裝(僞)是這樣的:
foreach (path in the include_path) {
if (is_readable(the path + the class name)) readable = true;
}
if (!readable) return;
但我擔心性能那裏。會傷害很多嗎?
(解決)發這樣的:
public function loadClass($className) {
$file = str_replace(array('_', '\\'), '/', $className) . '.php';
$paths = explode(PATH_SEPARATOR, get_include_path());
foreach ($paths as $path) {
if (is_readable($path . '/' . $file)) {
include_once $file;
return;
}
}
}
除了我不得不這樣做對每一個包含路徑(其中有平均約4,我猜)。 – 2009-08-24 18:44:20