PHP 7错误处理


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

由于错误层次结构不是从Exception扩展的,因此使用catch(Exception $ e){...}块来处理PHP 5中未捕获的异常的代码将不会处理这些错误。catch(Error $ e){...} block或 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