Hi everybody,
I hope this is the right place for asking such a question. If that's not
the case, please excuse me; I'd appreciate if you could redirect me to
the appropriate place.
The PHP manual says, regarding Interfaces, that the class implementing
the interface must use the exact same method signatures as are defined
in the interface. Not doing so will result in a fatal error.
I don't understand why this needs to be so. Consider for example the
following case: I have an interface
interface Foo
{
public function foo(SpecialClass $object);
}
and a class
class Bar
{
public function foo(BaseClass $object)
{
// do something with BaseClass $object
}
}
that has the same signature of Foo except for the fact that the method
foo takes a BaseClass, where SpecialClass extends BaseClass.
From a theoretical point of view, saying that a class satisfies the
interface Foo means that it has a method foo that is able to deal with a
SpecialClass object. So Bar satisfies the contract imposed by Foo since
it has a method foo that is able to deal with a BaseClass, which means
that it will also be able to deal with SpecialClass.
Hence it would seem natural to say that Bar implements Foo. But, as the
documentation says, this produces a fatal error.
What is the reason for this fatal error? Is there a specific reason to
do things this way? It this is the case, could you please provide an
example that proves why my approach creates problems.
Thank you
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php