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