php не распознает подписи AnAbstractClass::method
и ConcreteClass::method
как совместимые.
PHP верен, они не совместимы. Допуская, чтобы только экземпляры AClass
(или его дочерние элементы) передавались в ConcreteClass::method
, вы нарушаете контракт, который обеспечивает AnAbstractClass
: любой из его подклассов должен принимать AnInterface
в качестве аргумента для method()
.
Если ваш пример сработал, и у меня был другой класс BClass
, реализующий AnInterface
, у нас была бы ситуация, когда согласно AnAbstractClass
, method()
должен принимать экземпляры BClass
, тогда как согласно ConcreteClass
не должно.
Измените свою подпись на ConcreteClass::method
, чтобы она соответствовала подписи AnAbstractClass::method
.