Как мой собственный обработчик ошибок может определить, будет ли та же ошибка выброшена PHP как ErrorException?Php

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Как мой собственный обработчик ошибок может определить, будет ли та же ошибка выброшена PHP как ErrorException?

Сообщение Anonymous »

Я пытаюсь обновить старое приложение, чтобы использовать новые функции PHP 8.2+. Многие внутренние ошибки PHP теперь автоматически создаются как объекты ErrorException.
Вы можете настроить специальную функцию для обработки любых объектов 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»