0

我在 PHP 版本 5.5.9-1ubuntu4.4 上运行

当我使用代码运行文件时:

<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);

class A
{
  public function f(array $array)
  {
    echo 'a';
  }
}

class B extends A
{
  public function f(A $a, array $b)
  {
    echo 'b';
  }
}

$a = new A();
$a->f([1, 2, 3]);
$b = new B();
$b->f($a, []);

我预计会收到“严格标准”错误,因为我使用不同的签名重载了方法。但我没有收到任何错误或任何警告消息。只是正常的输出。为什么?

4

2 回答 2

2

有可能E_STRICT在您的 php.ini 文件中已禁用该功能以抑制遗留应用程序中的此类错误,这些错误在 PHP 没有像现在这样标准化时编写得有些糟糕(尽管仍然不是很标准化)。

此外,在低于 5.4.0 的 PHP 版本中,E_STRICT不包含在E_ALL. E_STRICT仅包含在E_ALLPHP 5.4.0 及更高版本中。

对于严格的错误,它们通常在“编译时”抛出,所以在error_reporting调用之前就抛出了,所以需要在 php.ini 中设置

于 2014-10-19T11:16:00.863 回答
1

尝试替换E_ALLerror_reporting(E_ALL | E_STRICT);

于 2014-10-19T11:17:48.307 回答