PHP 7 - 错误处理


从 PHP 7 开始,错误处理和报告已发生变化。现在大多数错误不是通过 PHP 5 使用的传统错误报告机制来报告错误,而是通过抛出 Error 异常来处理。与异常类似,这些 Error 异常会冒泡,直到到达第一个匹配的 catch 块。如果没有匹配的块,则将调用使用set_exception_handler()安装的默认异常处理程序。如果没有默认的异常处理程序,则异常将转换为致命错误,并像传统错误一样进行处理。

由于 Error 层次结构不是从 Exception 扩展而来的,因此在 PHP 5 中使用 catch (Exception $e) { ... } 块来处理未捕获异常的代码将不会处理此类错误。需要使用catch (Error $e) { ... } 块或set_exception_handler()处理程序来处理致命错误。

异常层次结构

例子

<?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());
?>

它产生以下浏览器输出 -

Modulo by zero