PHP 7 錯(cuò)誤處理

PHP 7 改變了大多數(shù)錯(cuò)誤的報(bào)告方式。不同於 PHP 5 的傳統(tǒng)錯(cuò)誤回報(bào)機(jī)制,現(xiàn)在大多數(shù)錯(cuò)誤都被當(dāng)作 Error 異常拋出。

這種 Error 異??梢韵衿胀ó惓R粯颖?try / catch 區(qū)塊所捕捉。如果沒(méi)有符合的 try / catch 區(qū)塊, 則呼叫異常處理函數(shù)(由 set_exception_handler() 註冊(cè))進(jìn)行處理。 如果尚未註冊(cè)異常處理函數(shù),則按照傳統(tǒng)方式處理:被報(bào)告為一個(gè)致命錯(cuò)誤(Fatal Error)。

Error 類別並不是從 Exception 類別 擴(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í)例

<?php
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