- 相關(guān)推薦
PHP7的異常處理詳解
在PHP中碰到異常的時(shí)候應(yīng)該如何處理呢,就跟隨百分網(wǎng)小編一起去了解下吧,想了解更多相關(guān)信息請(qǐng)持續(xù)關(guān)注我們應(yīng)屆畢業(yè)生考試網(wǎng)!
前言
PHP7的改動(dòng)中,影響比較大的,包括異常處理。
概述
更多的異常是直接通過(guò)PHP直接處理的,和之前的PHP5不同的是更多的異常是通過(guò)Error exceptions來(lái)拋出。
作為一個(gè)普通的擴(kuò)展,Error exceptions會(huì)持續(xù)冒出直到匹配到對(duì)應(yīng)的catch塊。如果沒(méi)有進(jìn)行匹配,就會(huì)觸發(fā)被設(shè)置的set_exception_handler()來(lái)執(zhí)行處理,如果沒(méi)有默認(rèn)的異常處理程序,則該異常將被轉(zhuǎn)換為一個(gè)致命錯(cuò)誤,并且將被像一個(gè)傳統(tǒng)的錯(cuò)誤被處理。
由于Error在錯(cuò)誤層次結(jié)構(gòu)不繼承異常,像這樣的代碼catch (Exception $e) { ... }在PHP5中并不會(huì)捕獲到對(duì)應(yīng)的異常。我們可以用代碼catch (Error $e) { ... }或者 set_exception_handler(),來(lái)對(duì)Error進(jìn)行處理。
錯(cuò)誤的層級(jí)結(jié)構(gòu)
Throwable
Error 錯(cuò)誤
ArithmeticError 算數(shù)錯(cuò)誤
PisionByZeroError 除數(shù)為0的錯(cuò)誤
AssertionError 聲明錯(cuò)誤
ParseError 解析錯(cuò)誤
TypeError 類型錯(cuò)誤
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);}
這里,并沒(méi)有出現(xiàn)服務(wù)器500的錯(cuò)誤。原因在于,PHP7中的Error把它攔截住了,沒(méi)有冒泡在服務(wù)器中。
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/error.php on line 14" ["string":"Error":private]=> string(0) "" ["code":protected]=> int(0) ["file":protected]=> string(48) "/Applications/mamp/apache2/htdocs/curl/error.php" ["line":protected]=> int(9) ["trace":"Error":private]=> array(1) { [0]=> array(4) { ["file"]=> string(48) "/Applications/mamp/apache2/htdocs/curl/error.php" ["line"]=> int(14) ["function"]=> string(3) "add" ["args"]=> array(2) { [0]=> string(4) "left" [1]=> string(5) "right" } } } ["previous":"Error":private]=> NULL}
這樣我們就可以通過(guò)日志的方式記錄他們。
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";}//其實(shí)上面的例子我在運(yùn)行過(guò)程中,并沒(méi)有被EngineException捕獲異常,經(jīng)過(guò)測(cè)試,也是通過(guò)Error進(jìn)行的錯(cuò)誤的攔截
如果異常沒(méi)有被捕獲,PHP將繼續(xù)擔(dān)任目前它拋出同樣的致命錯(cuò)誤。
【PHP7的異常處理詳解】相關(guān)文章:
PHP7系列中的異常處理08-11
PHP7系列之-異常處理06-07
Java編程中異常處理的方法10-02
PHP5異常處理的方法是什么09-01
交通事故處理流程詳解07-12
Linux中生成Core Dump系統(tǒng)異常信息記錄文件處理方法介紹08-17
十件在PHP7中不要做的事情10-15
PHP7的五大新特性有哪些08-11
Dreamweaver技巧詳解09-01