Как требовать подкласс абстрактного класса в качестве аргумента в методе - PullRequest
0 голосов
/ 13 ноября 2018

Я пытаюсь создать иерархию, используя объекты 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 эквивалентная функциональность, с которой я еще не сталкивался?

...