Hello all,

I hope the subject is not misleading. Please look at the following code:

    <?php
    class A { }

    class B extends A { }

    interface C {
        function foo(A $a);
    }

    class D implements C {
        public function foo(B $b) {
            
        }
    }

This code produces a "Fatal error: Declaration of D::foo() must be
compatible with C::foo(A $a) in /xyz/inheritance.php on line 10"
(see http://3v4l.org/l2M0f).

I don't get the reason for that behavior (and I could not find any
documentation about that, at least not at
http://php.net/manual/en/language.oop5.typehinting.php).

I have already found https://bugs.php.net/bug.php?id=42330 but Derick's
response does not help me and the linked file cannot be accessed
anymore.

I'd say that it is absolutely legal to define a more specialized
type in a child or implementing class, or would this have any bad
side effects?

Thanks and best regards
Christian

Reply via email to