PHP 7 改变了大多数错误的报告方式。不同于传统(PHP 5)的错误报告机制,现在大多数错误被作为 Error 异常抛出。
这种 Error 异常可以像 [Exception]异常一样被第一个匹配的 try / catch 块所捕获。如果没有匹配的 [catch]块,则调用异常处理函数(事先通过 [set_exception_handler()]注册)进行处理。 如果尚未注册异常处理函数,则按照传统方式处理:被报告为一个致命错误(Fatal Error)。
Error 类并非继承自 [Exception] 类,所以不能用 catch (Exception $e) { ... }
来捕获 Error。你可以用 catch (Error $e) { ... }
,或者通过注册异常处理函数( [set_exception_handler()])来捕获 Error。
一个完整的实例是:
try {
$this->_startTime = microtime(true);
$this->_beforeRun();
$this->run();
$this->_afterRun();
} catch (\Exception $e) {//主动throw异常抛出
$code = $e->getCode();
$msg = $e->getMessage();
$log = 'exp,code:'.$code.',msg:'.$msg;
$code = $code ? $code : 1;
$this->error($msg,array(),$code);
Core::write($log,Core::LEVEL_EXCEPTION,'que');
}catch (\Error $error){//异常错误捕获,如果不设置Error捕获,则会落到相应的nginx日志里
$code = $error->getCode();
$msg = $error->getMessage();
$log = 'error,code:'.$code.',msg:'.$msg;
$code = $code ? $code : 1;
$this->error($msg,array(),$code);
Core::write($log,Core::LEVEL_NOTICE,'que');
}
补充说明:例如函数不存在,语法错误,参数类型不正确等都属于Error级别的错误。由Error捕获