Сама ошибка заключается в том, что E_STRICT
установлено в error_reporting
или error_reporting ini directive
...
По сути, это говорит о том, что не рекомендуется менять «подпись» функции с помощью наследования. Пример:
class ParentClass {
public function doFoo() {}
}
class ChildClass extends ParentClass {
public function doFoo($bar) {}
}
Это приведет к возникновению этой ошибки, поскольку родительские и дочерние подписи не совпадают. Теперь подпись - это то, как она выглядит для синтаксического анализатора, поэтому:
public function doFoo($bar) {}
public function doFoo($baz) {}
Обе совпадают подписи. Имена переменных не обязательно должны быть одинаковыми, но число переменных, их порядок, подсказки их типов и значения по умолчанию должны быть одинаковыми.
public function doFoo(array $bar, ParentClass $somethign, $biz = 'no') {}
public function doFoo(array $baz, ParentClass $parent, $buz = 'no') {}
Они также совпадают, но они не совпадают:
public function doFoo(array $baz, ParentClass $parent, $buz = 'no') {}
public function doFoo(array $baz, ChildClass $parent, $buz = 'no') {}
Это не обязательно «плохо» делать (фреймворки и разработчики делают это постоянно). Прямо сейчас язык поддерживает это хорошо. Причина ошибки E_STRICT
заключается в том, что в будущем язык может ее не поддерживать. Так что он «предупреждает вас», что может быть плохой идеей использовать ваш дизайн таким образом ...