PHP 7 改變了大多數(shù)錯誤的報告方式剑肯。不同于傳統(tǒng)(PHP 5)的錯誤報告機制,現(xiàn)在大多數(shù)錯誤被作為 Error 異常拋出土砂。
這種 Error 異沉祝可以像 [Exception]異常一樣被第一個匹配的 try / catch 塊所捕獲。如果沒有匹配的 [catch]塊恳不,則調用異常處理函數(shù)(事先通過 [set_exception_handler()]注冊)進行處理檩小。 如果尚未注冊異常處理函數(shù),則按照傳統(tǒng)方式處理:被報告為一個致命錯誤(Fatal Error)妆够。
Error 類并非繼承自 [Exception] 類识啦,所以不能用 catch (Exception $e) { ... }
來捕獲 Error。你可以用 catch (Error $e) { ... }
神妹,或者通過注冊異常處理函數(shù)( [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');
}
補充說明:例如函數(shù)不存在冕茅,語法錯誤,參數(shù)類型不正確等都屬于Error級別的錯誤蛹找。由Error捕獲