перегрузка — почему PHP не показывает ошибку Strict Standards при переопределении метода с другой подписью?

Я работаю на 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, []);

Я ожидаю ошибку «Строгие стандарты», потому что перегружаю метод другой подписью. Но я не получил ни ошибки, ни предупреждения. Просто нормальный выходной. Зачем?

0

Решение

Возможно, что 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

2

Другие решения

Попробуйте заменить E_ALL с error_reporting(E_ALL | E_STRICT);

1

По вопросам рекламы [email protected]