找回密码
 注册

[PHP] Catchable fatal error: Argument 1 passed to xc() must be of the type

php 发表于 2015/11/8 02:32 | 显示全部楼层 |阅读模式
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时的代码如下,
  1. <?php
  2.         function xc(array $a){
  3.         }
  4.         xc(4);        
  5. ?>
复制代码
将错误转化为异常抛出并且捕获,现在Catchable fatal error就真的可以catch了。如果你希望所有错误信息都作为异常招聘,则可以去掉 set_error_handler 的第2个参数,所有能够被错误处理函数处理的错误都会作为异常抛出。
  1. <?php
  2.         function exceptionErrorHandler($errNumber, $errStr, $errFile, $errLine ) {
  3.                 throw new ErrorException($errStr, 0, $errNumber, $errFile, $errLine);
  4.         }
  5.         set_error_handler('exceptionErrorHandler',E_RECOVERABLE_ERROR);

  6.         function xc(array $a){
  7.         }

  8.         try{
  9.                 xc(4);
  10.         }catch(Exception $e){
  11.                 echo $e->getMessage();
  12.         }
  13. ?>
复制代码
PHP7开始,变量类型不符时会直接抛出TypeError异常,可以直接捕获,而不需要再设置错误处理函数。
  1. try{
  2.         xc(4)
  3. }catch(TypeError $te){
  4.         echo $te->getMessage();
  5. }
复制代码
 楼主| php 发表于 2015/12/13 13:54 来自手机版 | 显示全部楼层
PHP7+可以不用设置错误处理函数,可以直接try{ xc(4) }catch(TypeError $te){ echo $te->getMessage();  }
回复

使用道具 举报

手机版|轻松E站

轻松E站

快速回复 返回顶部 返回列表