Re: inheritance check too strict?

From: Date: Thu, 19 Aug 2010 08:32:15 +0000
Subject: Re: inheritance check too strict?
References: 1 2 3  Groups: php.internals 
Request: Send a blank email to internals+get-49451@lists.php.net to get a copy of this message
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

« previous php.internals (#49451) next »