Функция set_error_handler не вызывает автозагрузку - PullRequest
4 голосов
/ 21 декабря 2009

У меня установлена ​​функция set_error_handler() для вызова функции в случае ошибки.

В этой функции у меня есть собственная реализация класса исключения:

function acs_error_handler($errno, $errstr, $errfile, $errline) {    
    throw new acs_exception($errstr, $errno);     
}

Это дает мне следующую ошибку:

Неустранимая ошибка: класс 'acs_exception' не найден

По какой-то причине эта функция не вызывает мою функцию автозагрузки, которую я настроил с помощью:

spl_autoload_register('__autoload');

Если я добавлю строку:

__autoload('acs_exception');

перед вызовом класса в функции ошибки все работает.

Мой вопрос: не должна ли срабатывать функция __autoload() при вызове класса acs_exception в функции триггера ошибки ??

Ответы [ 2 ]

3 голосов
/ 22 декабря 2009

Вот отчет об ошибке в PHP .

Ваша ошибка сработала в время компиляции, которое отключает автозагрузку (и одновременно spl_autoload).

Не исправлено для PHP5.3, как может вызывает много других проблем.

1 голос
/ 01 октября 2014

Это было исправлено в PHP 5.4.21 - теперь функции автозагрузки SPL также запускаются из функций обработки ошибок! :)

...