set_exception_handler пытается отловить ошибку

Вот код, который я использую, чтобы ловить на глобальном уровне пропущенные исключения и ошибки:

set_exception_handler( function( Exception $e ) {
$exceptionCode = $e->getCode();

switch ( $exceptionCode ) {
case '42000': # Database
FlashMessages::flashIt( 'message', 'There is a syntax error in the db query' );
include( Settings::ABSPATH . '/src/views/message.php' );
var_dump( $e );
exit;
break;
default:
FlashMessages::flashIt( 'message', 'Something unpredicted happened.' );
include( Settings::ABSPATH . '/src/views/message.php' );
var_dump( $e );
exit;
break;
}
} );

set_error_handler( function( $errno, $errstr, $errfile, $errline ) {
FlashMessages::flashIt( 'message', 'An error happened.' );
include( Settings::ABSPATH . '/src/views/message.php' );
var_dump( $errstr );
exit;
} );

Что я ожидал:
Все исключения перехвачены set_exception_handler.
Все ошибки пойманы set_error_handler.

Что у меня есть: set_exception_handler пытается перехватить ошибки и создать проблемы: Неустранимая ошибка: Uncaught TypeError: Аргумент 1, передаваемый в {closure} (), должен быть экземпляром Exception, экземпляром Error.

set_error_handler не улавливает такого рода ошибки, даже если я полностью удаляю set_exception_handler.

Вопрос: как я могу уловить из этих глобальных функций тот тип ошибки, который пропускают обе эти функции?

0

Решение

Изменить тип параметра обработчика исключений с Exception в Throwable,
http://php.net/manual/en/function.set-exception-handler.php#refsect1-function.set-exception-handler-changelog

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector