Greetings PHP Intern@ls :)
There is a PHP behavior I disagree with regarding OO model.
It's been here for a long time (5.0 ??, at least 5.2, 5.3 and 5.4) , here
it is :
<?php
interface Iface1 { }
interface Iface2 extends Iface1 { }
class Foo {
public function bar(Iface1 $arg) { }
}
class Foo2 extends Foo {
public function bar(Iface2 $arg) { }
}
?>
Strict Standards: Declaration of Foo2::bar() should be compatible with that
of Foo::bar()
I find this wrong.
Liskov (and the error message) says we must stay "compatible" in our
inheritence.
The fact is that we are in the code above :
- A uses IfaceA
- B extends A
- B should be able to overwrite A's method typing their IfaceA params on
IfaceB, if IfaceB extends IfaceA (and is thus compatible with it).
Thoughts ?
Julien.Pauli