以下是我用来捕捉全局级错过的异常和错误的代码:
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尝试捕获错误并生成问题:致命错误:未捕获TypeError:传递给{closure}()的参数1必须是Exception的实例,给出Error的实例
即使我完全删除了set_exception_handler,set_error_handler也不会捕获此类错误。
问题:如何从这些全局函数中捕获这两种函数错过的错误?
答案 0 :(得分:1)
将异常处理程序参数类型从Exception
更改为Throwable
。
http://php.net/manual/en/function.set-exception-handler.php#refsect1-function.set-exception-handler-changelog