首页 > 解决方案 > 如何要求抽象类的子类作为方法中的参数

问题描述

我正在尝试使用 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声明buildWithConfig必须与Runner类中的该方法兼容,理由是显然SpecificConfig无法填补ConfigObj. 我可以通过不声明类型来解决这个问题,但我不想这样做,因为它需要额外的处理才能实现相同的类型安全。

在 Java 中,使用泛型可以很容易地使用多态性。PHP中是否有我还没有遇到过的等效功能?

标签: polymorphismabstract-classphp-7.1

解决方案


推荐阅读