php錯誤及異常處理
阿新 • • 發佈:2019-01-07
現在php開發基本都使用框架,而框架一般都封裝了自己的異常處理,但是,有時候也會有比較坑的框架,只能處理業務錯誤,不僅無法追蹤系統錯誤,還遮蔽了系統錯誤,所以最近寫了一個異常處理類,大家只需要在框架的核心檔案include一下,在需要使用的時候
new SystemDebug();
一下即可
下面把程式碼分享給大家
/** * Class SystemDebug * @package System\debug * 異常處理 */ class SystemDebug{ public function __construct(){ error_reporting(E_ALL); register_shutdown_function('SystemDebug::fatalError'); set_error_handler('SystemDebug::appError'); set_exception_handler('SystemDebug::appException'); } /** * 致命的錯誤 */ static public function fatalError() { if ($e = error_get_last()) { switch($e['type']){ case E_ERROR: case E_PARSE: case E_CORE_ERROR: case E_COMPILE_ERROR: case E_USER_ERROR: ob_end_clean(); die("<h1>致命的錯誤</h1><hr><p>錯誤程式碼:{$e['type']}</p><p>錯誤原因:{$e['message']}</p><p>錯誤路徑:{$e['file']}</p><p>錯誤行號:{$e['line']}</p>"); break; } } } /** * @param $errno * @param $errstr * @param $errfile * @param $errline * 自定義錯誤 */ static public function appError($errno, $errstr, $errfile, $errline) { switch ($errno) { case E_ERROR: case E_PARSE: case E_CORE_ERROR: case E_COMPILE_ERROR: case E_USER_ERROR: ob_end_clean(); die("<h1>自定義錯誤</h1><hr><p>錯誤程式碼:{$errno}</p><p>錯誤原因:{$errstr}</p><p>錯誤路徑:{$errfile}</p><p>錯誤行號:{$errline}</p>"); break; default: break; } } /** * @param $e * 異常捕獲 */ static public function appException($e) { $error = array(); $error['message'] = $e->getMessage(); $trace = $e->getTrace(); if('E'==$trace[0]['function']) { $error['file'] = $trace[0]['file']; $error['line'] = $trace[0]['line']; }else{ $error['file'] = $e->getFile(); $error['line'] = $e->getLine(); } $error['trace'] = $e->getTraceAsString(); die("<h1>發生異常</h1><hr><p>錯誤原因:{$error['message']}</p><p>錯誤路徑:{$error['file']}</p><p>錯誤行號:{$error['line']}</p>"); } }
執行結果如下
呼叫了不存在的方法
trigger_error("使用者自定義業務錯誤");
throw new Exception("丟擲了異常");