在PHP7中是如何進(jìn)行錯誤處理的?

2018-10-31 17:14 更新

在 PHP7 中改變了大多數(shù)錯誤的報告方式。不再通過 PHP5 使用的傳統(tǒng)錯誤報告機(jī)制來報告錯誤,現(xiàn)在大多數(shù)錯誤被作為 Error 異常拋出。這種 Error 異??梢韵?nbsp;Exception 異常一樣被第一個匹配的 try / catch 塊所捕獲。如果沒有匹配的 catch 塊,則調(diào)用異常處理函數(shù)(事先通過 set_exception_handler() 注冊)進(jìn)行處理。 如果尚未注冊異常處理函數(shù),則按照傳統(tǒng)方式處理:被報告為一個致命錯誤(Fatal Error)。

由于錯誤層次結(jié)構(gòu)不從 Exception 擴(kuò)展,因此使用 catch(Exception $ e){...} 塊處理 PHP5 中未捕獲的異常的代碼將不會處理此類錯誤。需要一個 catch(Error $ e){...} 塊或一個 set_exception_handler()處理程序來處理致命錯誤。

exception_hierarchy

Error 層次結(jié)構(gòu)

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

使用示例

<?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
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號