Вы можете настроить специальную функцию для обработки любых объектов ErrorException, которые выдаются, но не перехватываются.
Проблема в том, что иногда PHP создает оба объекта ErrorException и одновременно использует старый обработчик ошибок. . В результате одна и та же ошибка обрабатывается дважды.
Рассмотрите следующий упрощенный код:
Код: Выделить всё
// Setup Error Handling
ErrorHandler::Init();
// Try to include a file that doesn't exist:
require '/path/to/nothing.php';
// The simple error class:
abstract class ErrorHandler {
static public function Init(){
set_exception_handler('ErrorHandler::FinalException');
set_error_handler('ErrorHandler::BasicErrorHandler');
}
static public function FinalException($e){
echo '
FinalException() TRIGGERED!
';
}
static public function BasicErrorHandler($errorNo){
echo '
ErrorHandler() TRIGGERED!
';
}
}
Код: Выделить всё
ErrorHandler() TRIGGERED!
FinalException() TRIGGERED!
Если возможно, я бы предпочел просто использовать исключения . Но если я не использую set_error_handler(), в дополнение к исключению я все равно получаю стандартное сообщение об ошибке. Он просто не передается обработчику.
- Можно ли установить флаг, который отключает всю обработку ошибок старого стиля и использует только исключения, поэтому мне не нужно устанавливать set_error_handler() в дополнение к set_Exception_handler()?
- Если нет, то как я могу обнаружить в своем пользовательском обработчике ошибок (который всегда запускается первым), что та же ошибка также будет выдана PHP как ErrorException, чтобы она не обрабатывалась дважды? >
Подробнее здесь: https://stackoverflow.com/questions/786 ... -thrown-by
Мобильная версия