On Thu, 2010-08-19 at 01:13 -0700, Stas Malyshev wrote: > Hi! > > > I was under the impression that, in order for inheritance to provide > > proper polymorphism, overridden methods should share the parent's method > > signature, although they can have additional optional arguments. > > Your impression is wrong. Overriden method should have _compatible_ > signature - i.e. accept any argument set that parent object accepted. > Nothing requires it to have the same signature.
Let|s take a look at making it one step more complex: class A { public function foo(Foo $a = null) {} } class B extends A { public function foo() {} } class C extends B { public function foo(Bar $a = null) {} } Here B::foo() is compatible with A:foo() and as the parameter is optional C::foo() is compatible with B::foo(). But C::foo() is no more compatible with A::foo(). So I consider the message good and correct. johannes -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php