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語句。
另一種的寫法常見於MVC框架,就是調用鈎子函數,在作者寫的Pfinal MVC框架中就用了這種方法,可以做到全局處理異常,當有未捕獲的異常的`時候,使用鈎子函數註冊的處理函數進行處理,不至於會把異常堆棧丟給用户,這是PHP5中高級一點的異常處理方法。以下是作者的Pfinal框架中的異常處理核心文件
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中,可以通過捕獲異常,處理以上錯誤,不會拋出Fatal Error
-
ini函數解析
PHP獨特的語法混合了C、Java、Perl以及PHP自創的語法。它可以比CGI或者Perl更快速地執行動態網頁。以下是小編為大家搜索整理的ini函數解析,希望能給大家帶來幫助!更多精彩內容請及時關注我們應屆畢業生考試網!t、ini_get_all、ini_restore。個人感覺最有用的就...
-
10個免費PHP腳本下載的網站
導語:你知道哪些網站可以免費寫真PHP腳步語言嗎?下面的是本站小編為大家蒐集的10個提供免費PHP腳本下載的網站,希望對你能有所幫助。Junkyard這裏提供免費的PHP腳本下載。包括PHP資源,教程,文章等等。為你提供分類列表,包括免費的PHP腳本,商業PHP腳本,PHP資源,PHP教程,網...
-
Yii2創建表單(ActiveForm)方法
Yii2創建表單(ActiveForm)的方法,結合實例形式詳細分析了Yii創建表單的詳細步驟及相關函數與屬性的使用技巧,需要的朋友可以參考下.由於表單涉及到一些驗證方面的信息,屬性設置又比較多、比較複雜,所以哪裏有什麼不正確的地方請留言指點目錄表單的生成表單中的方...
-
如何加速你的PHP程序
我一直認為PHP的運行速度是非常的理想的,尤其是Zend引擎的加速之後。但是PHP仍然有加速的可能,你知道嗎?一起來看看如何加速你的PHP程序吧。所有的一切都始於如何優化PHP的編譯嘗試使用針對CPU型號的特殊編譯參數-msse-mmmx-mfpmath=sse在編譯的`時候添加-03參數...