Re: inheritance check too strict?
| From: | Nathan Rixham | Date: | Thu, 19 Aug 2010 09:25:44 +0000 |
| Subject: | Re: inheritance check too strict? | ||
| References: | 1 2 3 4 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-49452@lists.php.net to get a copy of this message | ||
Johannes Schlüter wrote:
On Thu, 2010-08-19 at 01:13 -0700, Stas Malyshev wrote:what if Bar implements Foo, or Bar extends Foo - surely that should be compatible given the inheritance chain.Hi!Let|s take a look at making it one step more complex: class A {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.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.