如何在方法中要求抽象类的子类作为参数

时间:2018-11-13 20:12:59

标签: polymorphism abstract-class php-7.1

我正在尝试使用PHP对象创建层次结构,以进行编译时错误检查,以确保对象的类型正确。示例:

abstract class ConfigObj {
    ...
}
abstract class Runner {
    public static abstract function buildWithConfig(ConfigObj $config);
}

class SpecificConfig extends ConfigObj {
    ...
}
class MainRunner extends Runner {
    public static function buildWithConfig(SpecificConfig $config){
        ...
    }
}

尝试这样做时,PhpStorm抱怨MainRunner的{​​{1}}声明必须与buildWithConfig类中的该方法兼容,理由是显然Runner无法填充SpecificConfig的角色。我可以通过不声明类型来解决此问题,但我宁愿不要这样做,因为它需要额外的处理才能实现相同的类型安全性。

对于Java,使用泛型将很容易使用泛型。我还没有遇到过PHP中的等效功能吗?

0 个答案:

没有答案