PHP7的異常處理詳解
在PHP中碰到異常的時候應該如何處理呢,就跟隨本站小編一起去了解下吧,想了解更多相關信息請持續關注我們應屆畢業生考試網!
前言
PHP7的改動中,影響比較大的,包括異常處理。
概述
更多的異常是直接通過PHP直接處理的,和之前的PHP5不同的是更多的異常是通過Error exceptions來拋出。
作為一個普通的擴展,Error exceptions會持續冒出直到匹配到對應的catch塊。如果沒有進行匹配,就會觸發被設置的set_exception_handler()來執行處理,如果沒有默認的異常處理程序,則該異常將被轉換為一個致命錯誤,並且將被像一個傳統的錯誤被處理。
由於Error在錯誤層次結構不繼承異常,像這樣的代碼catch (Exception $e) { ... }在PHP5中並不會捕獲到對應的.異常。我們可以用代碼catch (Error $e) { ... }或者 set_exception_handler(),來對Error進行處理。
錯誤的層級結構
Throwable
Error 錯誤
ArithmeticError 算數錯誤
PisionByZeroError 除數為0的錯誤
AssertionError 聲明錯誤
ParseError 解析錯誤
TypeError 類型錯誤
Exception 異常
….
PHP RFC
Throwable Interface
function add(int $left, int $right) { return $left + $right;}try { echo add('left', 'right');} catch (Exception $e) { // Handle exception} catch (Error $e) { // Clearly a different type of object // Log error and end gracefully var_dump($e);}
這裏,並沒有出現服務器500的錯誤。原因在於,PHP7中的Error把它攔截住了,沒有冒泡在服務器中。
object(TypeError)#1 (7) { ["message":protected]=> string(139) "Argument 1 passed to add() must be of the type integer, string given, called in /Applications/mamp/apache2/htdocs/curl/ on line 14" ["string":"Error":private]=> string(0) "" ["code":protected]=> int(0) ["file":protected]=> string(48) "/Applications/mamp/apache2/htdocs/curl/" ["line":protected]=> int(9) ["trace":"Error":private]=> array(1) { [0]=> array(4) { ["file"]=> string(48) "/Applications/mamp/apache2/htdocs/curl/" ["line"]=> int(14) ["function"]=> string(3) "add" ["args"]=> array(2) { [0]=> string(4) "left" [1]=> string(5) "right" } } } ["previous":"Error":private]=> NULL}
這樣我們就可以通過日誌的方式記錄他們。
Exceptions in the engine (for PHP 7)
function call_method($obj) { $obj->method();}try { call_method(null); // oops!} catch (EngineException $e) { echo "Exception: {$e->getMessage()}/n";}//其實上面的例子我在運行過程中,並沒有被EngineException捕獲異常,經過測試,也是通過Error進行的錯誤的攔截
如果異常沒有被捕獲,PHP將繼續擔任目前它拋出同樣的致命錯誤。
-
PHP考試筆試題
用寶珠打扮自己,不如用知識充實自己。以下是小編為大家搜索整理的PHP考試筆試題,希望能給大家帶來幫助!更多精彩內容請及時關注我們應屆畢業生考試網!1、{PHP題目}標識符是變量的名稱。PHP中的標識符用$+變量名來表示。標識符在PHP中遵循下列選項中的那些規則?()...
-
用PHP讀取文件的正確方法
處理諸如PHP之類的現代編程語言的樂趣之一就是有大量的選項可用。PHP可以輕鬆地贏得Perl的座右銘There‘smorethanonewaytodoit(並非只有一種方法可做這件事),尤其是在文件處理上。但是在這麼多可用的選項中,哪一種是完成作業的最佳工具?當然,實際答案取決於...
-
編譯chm格式PHP手冊的方法
微軟的chm文件格式是很受我們喜愛的,因為它可以把很多HTML文件打包成一個文件,容易傳輸和分享。而且非常方便易用,支持索引、搜索等。正因為這樣,大家通常都使用chm版本的PHP手冊。php.net會定期編譯PHP手冊,提供各種版本供大家下載,包括chm格式。由於是定期編譯,所以...
-
PHP常用函數總結
PHP的常用函數有哪些呢?下面是由本站小編為大家整理的PHP常用函數總結,喜歡的可以收藏一下!瞭解更多詳情資訊,請關注應屆畢業生考試網!數學函數():求絕對值$abs=abs(-4.2);//4.2數字絕對值數字():進一法取整echoceil(9.999);//10浮點數進一取整r():捨去法取整ech...