在 PHP7 中改變了大多數(shù)錯(cuò)誤的報(bào)告方式。不再通過(guò) PHP5 使用的傳統(tǒng)錯(cuò)誤報(bào)告機(jī)制來(lái)報(bào)告錯(cuò)誤,現(xiàn)在大多數(shù)錯(cuò)誤被作為 Error 異常拋出。這種 Error 異常可以像 Exception 異常一樣被第一個(gè)匹配的 try / catch 塊所捕獲。如果沒有匹配的 catch 塊,則調(diào)用異常處理函數(shù)(事先通過(guò) set_exception_handler() 注冊(cè))進(jìn)行處理。 如果尚未注冊(cè)異常處理函數(shù),則按照傳統(tǒng)方式處理:被報(bào)告為一個(gè)致命錯(cuò)誤(Fatal Error)。
由于錯(cuò)誤層次結(jié)構(gòu)不從 Exception 擴(kuò)展,因此使用 catch(Exception $ e){...} 塊處理 PHP5 中未捕獲的異常的代碼將不會(huì)處理此類錯(cuò)誤。需要一個(gè) catch(Error $ e){...} 塊或一個(gè) set_exception_handler()處理程序來(lái)處理致命錯(cuò)誤。
<?php
class MathOperations {
protected $n = 10;
// Try to get the Division by Zero error object and display as Exception
public function doOperation(): string {
try {
$value = $this->n % 0;
return $value;
} catch (DivisionByZeroError $e) {
return $e->getMessage();
}
}
}
$mathOperationsObj = new MathOperations();
print($mathOperationsObj->doOperation());
?>
它產(chǎn)生以下瀏覽器輸出:
Modulo by zero
更多建議: