PHP 7 錯(cuò)誤處理
PHP 7 改變了大多數(shù)錯(cuò)誤的報(bào)告方式。不同于 PHP 5 的傳統(tǒng)錯(cuò)誤報(bào)告機(jī)制,現(xiàn)在大多數(shù)錯(cuò)誤被作為 Error 異常拋出。
這種 Error 異??梢韵衿胀ó惓R粯颖?try / catch 塊所捕獲。如果沒(méi)有匹配的 try / catch 塊, 則調(diào)用異常處理函數(shù)(由 set_exception_handler() 注冊(cè))進(jìn)行處理。 如果尚未注冊(cè)異常處理函數(shù),則按照傳統(tǒng)方式處理:被報(bào)告為一個(gè)致命錯(cuò)誤(Fatal Error)。
Error 類(lèi)并不是從 Exception 類(lèi) 擴(kuò)展出來(lái)的,所以用 catch (Exception $e) { ... } 這樣的代碼是捕獲不 到 Error 的。你可以用 catch (Error $e) { ... } 這樣的代碼,或者通過(guò)注冊(cè)異常處理函數(shù)( set_exception_handler())來(lái)捕獲 Error。
Error 異常層次結(jié)構(gòu)
-
Error
- ArithmeticError
- AssertionError
- DivisionByZeroError
- ParseError
- TypeError
-
Exception
- ...
實(shí)例
實(shí)例
class MathOperations
{
protected $n = 10;
// 求余數(shù)運(yùn)算,除數(shù)為 0,拋出異常
public function doOperation(): string
{
try {
$value = $this->n % 0;
return $value;
} catch (DivisionByZeroError $e) {
return $e->getMessage();
}
}
}
$mathOperationsObj = new MathOperations();
print($mathOperationsObj->doOperation());
?>
以上程序執(zhí)行輸出結(jié)果為:
Modulo by zero
更多建議: