set_exception_handler试图赶上错误
问题描述:
下面是我用赶在全球范围内错过了异常和错误代码: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试图找出错误并产生问题:致命错误:未捕获的类型错误:传递给参数1 {关闭}()必须是例外的一个实例,给
的set_error_han dler没有按”错误的实例即使我完全删除了set_exception_handler,也可以捕获这种错误。
问题:如何从这些全局函数中捕获这两种函数都错过的错误?
答
将异常处理程序参数类型从Exception
更改为Throwable
。 http://php.net/manual/en/function.set-exception-handler.php#refsect1-function.set-exception-handler-changelog