当重写具有不同签名的方法时,为什么PHP不显示严格标准错误?

时间:2014-10-19 11:05:56

标签: php overloading php-5.5

我正在使用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, []);

我希望得到一个“严格标准”错误,因为我正在使用不同的签名来重载metod。但我没有收到任何错误或任何警告信息。只是正常输出。为什么呢?

2 个答案:

答案 0 :(得分:2)

有可能在你的php.ini文件中禁用了E_STRICT来压制遗留应用程序中的错误,这些错误在PHP现在没有标准化的情况下写得有点糟糕(尽管还不是很标准化)。

此外,在PHP版本BELOW 5.4.0中,E_STRICT中不包含E_ALLE_STRICT仅包含在PHP版本5.4.0及更高版本的E_ALL中。

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

答案 1 :(得分:1)

尝试将E_ALL替换为error_reporting(E_ALL | E_STRICT);