Я работаю на 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, []);
Я ожидаю ошибку «Строгие стандарты», потому что перегружаю метод другой подписью. Но я не получил ни ошибки, ни предупреждения. Просто нормальный выходной. Зачем?
Возможно, что E_STRICT
был отключен в вашем файле php.ini для подавления ошибок, подобных этой, в устаревших приложениях, которые несколько плохо написаны, когда PHP не был стандартизирован, как сейчас (хотя все еще не очень стандартизирован).
Кроме того, в версиях PHP ниже 5.4.0, E_STRICT
не входит в E_ALL
, E_STRICT
входит только в E_ALL
в PHP версии 5.4.0 и выше.
Со строгими ошибками они обычно выбрасываются во время компиляции, поэтому их выдают задолго до error_reporting
называется, так что нужно будет установить в php.ini
Попробуйте заменить E_ALL
с error_reporting(E_ALL | E_STRICT);