хочу реализовать стратегию, у меня есть несколько классов с одинаковым функционалом и в зависимости от условий, мне нужно использовать какой-то из них.
class Service1 implements ServiceInterface {}
class Service2 implements ServiceInterface {}
Один из вариантов - доставать их из контейнера по условию:
if ($condition === 1) {
return $this->container->get('service1');
} else if ($condition === 2) {
return $this->container->get('service2');
}
Мне не нравится такой вариант, потому что во-первых, из контейнера возвращается mixed, во-вторых, тут все неявно происходит, и, если я изменю класс Service1, то PhpStorm даже не найдет, что он где-то достается из контейнера.
Заинжекти все сервисы в одним аргументом через !tagged, предварительно добавь сервисам тег автоконфигурацией.
Нормально. Можно использовать сервислокатор отдельный, А не весь контейнер
Обсуждают сегодня