PHP:What';s在从具体类继承的方法中键入hint类的最佳方式';父类


PHP: What's the best way to type hint a class in an inherited method from a concrete class' parent class?

是的,我知道,这个标题很难理解:)

代码将使这种方式更容易理解:

namespace AbstractLevel;    
abstract class Bar 
{
    public function addFoo(Foo $foo)
    {
        $this->foo = $foo;
    }
}
namespace AbstractLevel'ConcreteLevel;
class Bar extends 'AbstractLevel'Bar
{
    public function addFoo(Foo $foo)
    {
        parent::addFoo($foo);
    }
}

当实例化AbstractLevel'ConcreteLevel'Bar类时,上面的代码应该会收到一个运行时通知,因为addFoo()方法的类型提示与其同名的父方法不同。

是否有任何方法可以确保AbstractLevel'ConcreteLevel'Bar::addFoo()类型提示类AbstractLevel'ConcreteLevel'Foo而不是AbstractLevel'Foo

有什么办法可以确保。。。

您可以向typehinded类添加绝对路径:

public function addFoo('AbstractLevel'ConcreteLevel'Foo $foo)

我目前还不能100%确定关键字abstract

你可能需要把它放在第一类:

abstract class Bar 
{
    public abstract function addFoo(Foo $foo)