У меня проблема с автозагрузчиком:
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;
}
}
}