Ответы пользователя по тегу Полиморфизм
  • В чем косяк (полиморфизм)?

    @xfg
    В программировании несколько различных видов полиморфизма. Вам следовало уточнить, о каком из них идет речь. Собеседующий с вами конечно же не совсем корректен, так как простейшая форма полиморфизма в вашем примере все же присутствует. Другое дело, что в php под полиморфизмом обычно понимают полиморфизм подтипов. Выглядит так
    interface UnitInterface {
      public function setHp();
    }
    class Warrior implements UnitInterface {
      public function setHp() {...}
    }
    class Medic implements UnitInterface {
      public function setHp() {...}
    }
    
    class MainProgram {
      private $unit;
    
      public function __construct(UnitInterface $unit) {
        $this->unit = $unit;
      }
      public function run() {
        return $this->unit->setHp();
      }
    }
    
    echo (new MainProgram(new Warrior())->run();

    Идея в том, что конструктор класса MainProgram ничего не знает о конкретных реализациях ваших юнитов. Он знает только о том, что они должны удовлетворять интерфейсу UnitInterface. В будущем если у вас хорошо спроектирован интерфейс, то вы сможете заменить одну реализацию юнита на другую, не изменяя код внутри MainProgram. Таким образом, вы соблюдаете принцип открытости/закрытости из SOLID, который говорит, что классы должны быть открыты для расширения, но закрыты для изменений.
    Ответ написан
    1 комментарий