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