Throwable 接口
目录:
简介
Throwable 层次结构
Error 对象
简介:
PHP7提供了一种全局的接口,使得所有的类都可以基于此使用throw关键字。在PHP中,异常与错误经常会遇到。在PHP之前,异常可以被捕获,但是错误是不能被捕获的。从PHP7开始,任何完整程序或一部分程序中的Fatal错误都可以被捕获。
为了更好的捕获诸多错误(大多数的 Fatal 错误),PHP7 提供了 throwable 接口,异常与错误都继承于这个接口。
注意:wom自己写的PHP类是不能直接继承throwable 接口的,如果希望继承throwable 接口,需要继承某个异常类。
PHP 7 改变了大多数错误的报告方式。不同于传统(PHP 5)的错误报告机制,现在大多数错误被作为 Error 异常抛出。
Throwable层次结构:
Throwable
Error
ArithmeticError
DivisionByZeroError
AssertionError
ParseError
TypeError
Exception
...
Error 对象:
现在大多数的Fatal错误情况会抛出一个Error实例,类似于异常捕获,Error实例可以被try/catch捕获,如下代码:
以上代码会产生一个Fatal 的错误,程序也停止运行,并且最后一行的echo语句不会被执行。
现在加入try/catch 后,代码如下:
再次执行以上代码,catch中的内容将会执行。并且代码会继续执行,最后的一行echo也会被输出。结果如下:
DivisionByZeroError 对象(Error的子实例)
大多数情况下,Error实例会在大部分 Fatal 错误的情况下被抛出,但是对于一些错误情况,只有Error的子实例(见Error层次图)会被抛出,当然使用 Error 对象也是可以的。
如下代码:
在PHP7之前,上面的代码会触发一个warning级别的错误,如今在PHP7中,执行上面的代码会抛出一个可以被捕获的DivisionByZeroError异常.如下:
补充:除以零的变化
Output of the above example in PHP 5:
Output of the above example in PHP 7:
ParseError 对象(Error的子实例)
eval函数 — 把字符串作为PHP代码执行
当使用eval函数进行对字符串进行解析时,发生 Fatal 错误,如下
如今在PHP7中,执行下面的代码会抛出一个可以被捕获的ParseError异常.如下:
捕获到的异常如下:
资料:
Last updated