PHP 7 錯誤處理

PHP 7 改變了大多數錯誤的報告方式。不同于 PHP 5 的傳統(tǒng)錯誤報告機制,現在大多數錯誤被作為 Error 異常拋出。

這種 Error 異常可以像普通異常一樣被 try / catch 塊所捕獲。如果沒有匹配的 try / catch 塊, 則調用異常處理函數(由 set_exception_handler() 注冊)進行處理。 如果尚未注冊異常處理函數,則按照傳統(tǒng)方式處理:被報告為一個致命錯誤(Fatal Error)。

Error 類并不是從 Exception 類 擴展出來的,所以用 catch (Exception $e) { ... } 這樣的代碼是捕獲不 到 Error 的。你可以用 catch (Error $e) { ... } 這樣的代碼,或者通過注冊異常處理函數( set_exception_handler())來捕獲 Error。

Error 異常層次結構

  • Error
    • ArithmeticError
    • AssertionError
    • DivisionByZeroError
    • ParseError
    • TypeError
  • Exception
    • ...

實例

<?php
class MathOperations 
{
   protected $n = 10;
   // 求余數運算,除數為 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í)行輸出結果為:

Modulo?by?zero