У меня есть проблема с моим заряжания: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, в среднем, я предположил бы). –