我正在使用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。但我没有收到任何错误或任何警告信息。只是正常输出。为什么呢?
答案 0 :(得分:2)
有可能在你的php.ini文件中禁用了E_STRICT
来压制遗留应用程序中的错误,这些错误在PHP现在没有标准化的情况下写得有点糟糕(尽管还不是很标准化)。
此外,在PHP版本BELOW 5.4.0中,E_STRICT
中不包含E_ALL
。 E_STRICT
仅包含在PHP版本5.4.0及更高版本的E_ALL
中。
对于严格的错误,它们通常在“编译时”抛出,因此在调用error_reporting
之前抛出,因此需要在php.ini中设置
答案 1 :(得分:1)
尝试将E_ALL
替换为error_reporting(E_ALL | E_STRICT);