Это сообщение означает, что есть определенные возможные вызовы методов, которые могут не работать во время выполнения. Предположим, у вас есть
class A { public function foo($a = 1) {;}}
class B extends A { public function foo($a) {;}}
function bar(A $a) {$a->foo();}
Компилятор проверяет только вызов $ a-> Foo() против требований A :: Foo(), который не требует никаких параметров. Однако $ a может быть объектом класса B, который требует параметра, и поэтому вызов будет терпеть неудачу во время выполнения.
Это, однако, не может потерпеть неудачу и не вызывает ошибку
class A { public function foo($a) {;}}
class B extends A { public function foo($a = 1) {;}}
function bar(A $a) {$a->foo();}
Так ни один метод не может иметь больше, чем требуемые параметры родительского метода.
Такое же сообщение также генерируется, когда типы подсказок не совпадают, но в этом случае PHP еще более ограничительный. Это дает ошибку:
class A { public function foo(StdClass $a) {;}}
class B extends A { public function foo($a) {;}}
, как это делает:
class A { public function foo($a) {;}}
class B extends A { public function foo(StdClass $a) {;}}
Это кажется более ограничительным, чем это должно быть, и я предполагаю, что это из-за внутренние органы.
Видимость различий вызывает другую ошибку, но по той же основной причине. Никакой метод не может быть менее заметным, чем его родительский метод.
нетJim имеет это точно в порядке. @ waiwai933, если вы могли бы разместить заголовки (только первая строка: 'function customMethod (...)') для каждой функции, мы могли бы рассказать вам конкретную проблему. – nickf
Подробнее о сообщении об ошибке и значениях времени компиляции PHP: https: //bugs.php.net/bug.php?id=46851 – hakre
Возможный дубликат [Строгие стандарты: Декларация 'должна быть совместима с' '] (http://stackoverflow.com/questions/17234259/strict-standards -declaration-of-should-be-compatible-with) –