PHP限定函数参数类型以后,如果传递的值不是对应的类型,则会抛出一个可以捕获的错误。在PHP7以上版本则是抛出TypeError错误。
Catchable fatal error: Argument 1 passed to xc() must be of the type array, integer given, called in D:\Web\www\local\index.php on line 4 and defined in D:\Web\www\local\index.php on line 2
如何捕获Catchable fatal error?可以设置错误处理函数来得到错误信息,然后将将错误信息作为异常抛出,这样就可以捕获异常。
抛出Catchable fatal error时的代码如下,- <?php
- function xc(array $a){
- }
- xc(4);
- ?>
复制代码 将错误转化为异常抛出并且捕获,现在Catchable fatal error就真的可以catch了。如果你希望所有错误信息都作为异常招聘,则可以去掉 set_error_handler 的第2个参数,所有能够被错误处理函数处理的错误都会作为异常抛出。- <?php
- function exceptionErrorHandler($errNumber, $errStr, $errFile, $errLine ) {
- throw new ErrorException($errStr, 0, $errNumber, $errFile, $errLine);
- }
- set_error_handler('exceptionErrorHandler',E_RECOVERABLE_ERROR);
- function xc(array $a){
- }
- try{
- xc(4);
- }catch(Exception $e){
- echo $e->getMessage();
- }
- ?>
复制代码 PHP7开始,变量类型不符时会直接抛出TypeError异常,可以直接捕获,而不需要再设置错误处理函数。
- try{
- xc(4)
- }catch(TypeError $te){
- echo $te->getMessage();
- }
复制代码 |
|