オートローダーに問題があります:
public function loadClass($className) {
$file = str_replace(array('_', '\\'), '/', $className) . '.php';
include_once $file;
}
ご覧のとおり、非常に簡単です。クラスのファイル名を推測して、それを含めようとします。しかし、私には問題があります。存在しないクラスを読み込もうとすると例外が発生します(例外をスローするエラーハンドラーがあるため)。これは、存在しないクラスでclass_exists()を使用したときにも発生するため、不便です。例外は必要ありません。「false」が返されるだけです。
インクルードの前に@を付けることでこれを以前に修正しました(すべてのエラーを抑制します)。ただし、これの大きな欠点は、このインクルードのパーサー/コンパイラーエラー(致命的)が(ログにも表示されない)表示されず、バグを見つけるのが困難になることです。
両方の問題を一度に解決するための最良の方法は何でしょうか?最も簡単な方法は、オートローダー(擬似コード)に次のようなものを含めることです。
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;
}
}
}