PHP 7 錯誤處理

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

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 請一定要注意,沒有特殊說明:本例 ****PHP Version < 7說起PHP異常處理,大家首先會想到try-...
    凌亂秋天閱讀 338評論 1 0
  • 先聊一聊 前幾天在做一個用到file_get_contents去定時提取改退簽規則和免費行李額的小需求,每天抓一次...
    孫小胖2018閱讀 661評論 0 1
  • 開篇一題:問:此腳本執行輸出什么,如果出現錯誤如何捕獲處理錯誤? 請先思考一下,然后帶著問題來看一下PHP的錯誤與...
    幽思片羽閱讀 576評論 0 0
  • #超級學習體#自我發展心理學10# 課題分離是著名心理學家阿德勒(Alfred Adler)提出的一個理論,指的就...
    怡然思語閱讀 390評論 0 1
  • 人生第二十個秋,在遠離家鄉千公里外的地方。今年的秋來得急促,都忘了告訴還在茂盛生長的路邊野草一聲,樹葉就在一夜之間...
    101ddbb28c89閱讀 183評論 0 3