有没有办法在扩展抽象类时将类型提示重新定义为后代类?
我将使用以下示例来说明我的问题:
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);
}
如果你尝试运行这个,PHP将抛出一个致命的错误,说Declaration of SimpleFactory::update() must be compatible with that of AbstractFactory::update()
我完全理解这意味着什么:s方法签名必须与其父抽象类的方法签名完全匹配。SimpleFactory::update()
但是,我的问题是:有没有办法允许具体方法(在本例中为)将类型提示重新定义为原始提示的有效后代?SimpleFactory::update()
例如,运算符在以下情况下将返回 true:instanceof
SimpleAttribute instanceof Attribute // => true
我确实意识到,作为一个解决方法,我可以在具体方法中使类型提示相同,并在方法体本身中执行检查实例,但是有没有办法在签名级别简单地强制执行这一点?