具体化抽象类方法的返回类型

时间:2019-10-29 16:00:09

标签: php oop interface

如何具体化抽象类方法的返回类型?

为什么这样做:

interface I {}

class A implements I {}

abstract class CA {
    abstract public function foo() : I;
}

class C extends CA {
    public function foo() : A
    {
        return new A;
    }
}

(new C)->foo();

导致Fatal error: Declaration of C::foo(): A must be compatible with CA::foo(): I? 由于返回类型A满足了实现接口I的要求。

1 个答案:

答案 0 :(得分:-1)

如果您返回I而不是A,则您的代码会正常工作,因为PHP不允许covariant return types。潜在的问题是您到底想实现什么?