polymorphism - 如何要求抽象类的子类作为方法中的参数
问题描述
我正在尝试使用 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中是否有我还没有遇到过的等效功能?