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捕獲