當前位置:才華齋>計算機>php語言>

PHP7系列之異常處理

php語言 閱讀(3.1W)
PHP7系列之異常處理
  在PHP中碰到異常的時候我們應該怎麼處理呢?以下是本站小編精心為大家整理的PHP7系列之異常處理,希望對大家處理程式設計異常有所幫助!就跟隨本站小編一起去了解下吧,想了解更多相關資訊請持續關注我們應屆畢業生考試網!  PHP5中的異常處理  在PHP5中異常或者說錯誤被分為不同的等級  1. 語法錯誤級別,也就是經常看到的Parse Error,這種錯誤,會在Zend引擎進行語法分析和編譯的時候就提示錯誤,注意這種錯誤一般都是比較低階的手寫錯誤,或者是關鍵詞寫錯,或者是少些一些分號等。對於這類錯誤,一般設定error_reporting(E_ALL)或者ini_set('display_errors','on'),在發生錯誤的時候,就會丟擲異常,通過追蹤異常堆疊就可以發現問題所在  2. Fatal Error錯誤,這種錯誤一般會導致PHP程序直接退出,也就是導致場景的白屏現象或者webserver返回500。這種錯誤是不能捕獲的,無法通過h或者其他手段進行處理。(PHP7在這一塊做了比較明顯的升級,方便我們更好的處理部分異常,詳見後文分析)  3. 正常的Exception。對於Exception我們常見的處理方式有兩種,一種是用h語句。  PHP7系列之-異常處理  另一種的寫法常見於MVC框架,就是呼叫鉤子函式,在作者寫的Pfinal MVC框架中就用了這種方法,可以做到全域性處理異常,當有未捕獲的異常的時候,使用鉤子函式註冊的處理函式進行處理,不至於會把異常堆疊丟給使用者,這是PHP5中高階一點的異常處理方法。以下是作者的Pfinal框架中的異常處理核心檔案  PHP7系列之-異常處理  PHP7中的異常處理升級  PHP7的改動中,影響比較大的,包括異常處理。PHP7實現了一個全域性的throwable介面,原來的Exception和部分Error都實現了這個介面(interface), 以介面的方式定義了異常的繼承結構。於是,PHP7中更多的'Error變為可捕獲的Exception返回給開發者,如果不進行捕獲則為Error,如果捕獲就變為一個可在程式內處理的Exception。這些可被捕獲的Error通常都是不會對程式造成致命傷害的Error,例如函式不存。  PHP7中,基於/Error exception,派生了5個新的engine exception:ArithmeticError / AssertionError / DivisionByZeroError / ParseError / TypeError。在PHP 7裡,無論是老的/Exception還是新的/Error,它們都實現了一個共同的interface: /Throwable。  對比原來的PHP5,  處理語法錯誤Parse Error,針對於語法錯誤,原來的PHP5是遇到語法錯誤,就會終止PHP程序,同時丟擲語法錯誤的提示。在新的PHP7中,這種異常型別被封裝為ParseError異常類,你可以在程式碼中通過h(ParseError $e){}來處理,媽媽在也不用擔心我少寫一個分號會導致系統直接奔潰了  處理Fatal Error,例如以下程式碼函式引數定義是classInstanceA的型別,但是實際呼叫的時候傳入了classInstanceB的型別,在PHP5中,會觸發一個Fatal Error,導致程序終止執行。  PHP7系列之-異常處理  現在在PHP7中,可以通過捕獲異常,處理以上錯誤,不會丟擲Fatal Error  PHP7系列之-異常處理