在PHP7中是如何进行错误处理的?
在 PHP7 中改变了大多数错误的报告方式。不再通过 PHP5 使用的传统错误报告机制来报告错误,现在大多数错误被作为 Error 异常抛出。这种 Error 异常可以像 Exception 异常一样被第一个匹配的 try / catch 块所捕获。如果没有匹配的 catch 块,则调用异常处理函数(事先通过 set_exception_handler() 注册)进行处理。 如果尚未注册异常处理函数,则按照传统方式处理:被报告为一个致命错误(Fatal Error)。
由于错误层次结构不从 Exception 扩展,因此使用 catch(Exception $ e){...} 块处理 PHP5 中未捕获的异常的代码将不会处理此类错误。需要一个 catch(Error $ e){...} 块或一个 set_exception_handler()处理程序来处理致命错误。
Error 层次结构
- Throwable
- Error
- ArithmeticError
- DivisionByZeroError
- AssertionError
- ParseError
- TypeError
- ArithmeticError
- Exception
- ...
- Error
使用示例
<?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