相关疑难解决方法(0)

有没有办法在扩展抽象类时将类型提示重新定义为后代类?

我将使用以下示例来说明我的问题:

class Attribute {}

class SimpleAttribute extends Attribute {}



abstract class AbstractFactory {
    abstract public function update(Attribute $attr, $data);
}

class SimpleFactory extends AbstractFactory {
   public function update(SimpleAttribute $attr, $data);

}
Run Code Online (Sandbox Code Playgroud)

如果你试图运行它,PHP会抛出一个致命的错误,说是 Declaration of SimpleFactory::update() must be compatible with that of AbstractFactory::update()

我完全理解这意味着什么:SimpleFactory::update()s方法签名必须与其父抽象类完全匹配.

但是,我的问题是:有没有办法允许具体方法(在这种情况下SimpleFactory::update())将类型提示重新定义为原始提示的有效后代?

一个例子是instanceof运算符,它将在以下情况下返回true:

SimpleAttribute instanceof Attribute // => true
Run Code Online (Sandbox Code Playgroud)

我确实认识到,作为一种解决方法,我可以在具体方法中使类型提示相同,并在方法体本身中进行实例检查,但有没有办法在签名级别简单地强制执行此操作?

php

29
推荐指数
2
解决办法
6289
查看次数

标签 统计

php ×1