前言
PHP7的改动中,影响比较大的,包括异常处理。
概述
更多的异常是直接通过PHP直接处理的,和之前的PHP5不同的是更多的异常是通过Error exceptions来抛出。
作为一个普通的扩展,Error exceptions会持续冒出直到匹配到对应的catch
块。如果没有进行匹配,就会触发被设置的set_exception_handler()
来执行处理,如果没有默认的异常处理程序,则该异常将被转换为一个致命错误,并且将被像一个传统的错误被处理。
由于Error在错误层次结构不继承异常,像这样的代码catch (Exception $e) { ... }
在PHP5中并不会捕获到对应的异常。我们可以用代码catch (Error $e) { ... }
或者 set_exception_handler()
,来对Error进行处理。
错误的层级结构
- Throwable
- Error 错误
- ArithmeticError 算数错误
- DivisionByZeroError 除数为0的错误
- AssertionError 声明错误
- ParseError 解析错误
- TypeError 类型错误
- ArithmeticError 算数错误
- Exception 异常
- ….
- Error 错误
PHP RFC
Throwable Interface
function add(int $left, int $right) {
return $left + $right;
}
try {
echo add('left', 'right');
} catch (Exception $e) {
// Handle exception
} catch (Error $e) { // Clearly a different type of object
// Log error and end gracefully
var_dump($e);