在我的平台

时间:2017-11-12 23:10:19

标签: php type-hinting

如果PHP函数的参数类型提示(或"type declaration")表示“数组”,并且您使用其他值调用此函数,例如一个整数,应该有一个

  

致命错误:未捕获的TypeError:传递给foo()的参数1必须是数组类型,整数给定为“。

代码:

function foo(array $x) {}

foo(5);  // -> Fatal error.

3v4l确认了这一点:https://3v4l.org/7BTtr 错误显示在所有相关的PHP版本中。

但是,我有一个本地PHP项目,其中默认忽略类型提示,不显示错误,后续代码正常执行。

一些调试:

  • 如果我在脚本开头(index.php的开头)插入有问题的代码,则会触发错误。
  • 如果我稍后在脚本中插入有问题的代码,则不再显示错误。

我想有一个ini_set()或其他东西可以改变PHP对这些错误的行为。

但我不知道哪个PHP设置(如果有的话)会导致忽略类型错误。

1 个答案:

答案 0 :(得分:2)

问题是由自定义错误处理程序函数引起的。在PHP 5中,如果自定义错误处理程序未返回FALSE,则脚本将继续运行。

以下演示确认了这一点:https://3v4l.org/neFdl。在PHP5中查找结果!

在我的情况下,它是带有_drupal_error_handler()的Drupal 7。如果错误代码与error_reporting()的当前值不匹配,此函数将以静默方式忽略该错误并且不显示或记录任何内容。

这看起来很愚蠢,但至少现在我知道发生了什么。