Size: a a a

2021 March 11

MM

Maksim Masiukevich in PHP
Artem Molotov
Ну так в конструкторе оно и с нулом. А дальше кто-то "опционально" может внедрить опциональную зависимость, если в процессе работы она кому-либо потребовалась.
_constructor(?Logger logger = null)
    this->logger = logger ?? new NullLogger

А скоро можно будет прям в объявлении писать

_constructor(?Logger logger = new NullLogger)
источник

MM

Maksim Masiukevich in PHP
Если тебе в момент работы внезапно потребовалось поменять зависимость, то твое место в макдональдсе
источник

ИЛ

Иван Лещёв in PHP
так тебе придётся писать такой же конструктор, и тупо пробрасывать все остальные аргументы, кроме логгера
как говорил дядя Джун, какой смысл?
источник

MM

Maksim Masiukevich in PHP
Как минимум, я не стану этим заниматься
источник

MM

Maksim Masiukevich in PHP
Если мне надо сделать декоратор, я сделаю декоратор, а не буду страдать чухней с экстендом
источник

MM

Maksim Masiukevich in PHP
А даже если бы захотел, то экономия нажатия автогенерации конструктора и дбавление в него 1 параметра - оч так себе аргумент
источник

AM

Artem Molotov in PHP
Vladimir Chernyshev
проблросить возможность может быть, инжектить в класс не надо
Не понял. Т.е. "пробросить" можно, а "инжектить" — нет?
источник

AM

Artem Molotov in PHP
Иван Лещёв
если мы делаем сервис потомок с одной дополнительной инъекцией логгера, например, то #[Required] сильно сократит код
конструктор будет от родителя и потомку будет насрать на его возможные изменения
В таких случаях уж лучше декоратором сделать, не обращая внимания на "легко" или "тяжело", мне кажется.
источник

VC

Vladimir Chernyshev in PHP
Artem Molotov
Не понял. Т.е. "пробросить" можно, а "инжектить" — нет?
да, как параметр обычного метода, которому вдруг понадобилась завсимость, типа callback
источник

AM

Artem Molotov in PHP
Maksim Masiukevich
_constructor(?Logger logger = null)
    this->logger = logger ?? new NullLogger

А скоро можно будет прям в объявлении писать

_constructor(?Logger logger = new NullLogger)
Так не спорю, я и говорил, что так делают. Но кроме этого ещё дают возможность в будущем указать другой логгер (если в конструктор сразу не добавили). Я не могу сказать, что это красиво, но и ужасным вряд ли назову.
источник

MM

Maksim Masiukevich in PHP
Artem Molotov
Так не спорю, я и говорил, что так делают. Но кроме этого ещё дают возможность в будущем указать другой логгер (если в конструктор сразу не добавили). Я не могу сказать, что это красиво, но и ужасным вряд ли назову.
Ты указываешь интерфейс. А что там будет - всем похер, включая тебя
источник

VC

Vladimir Chernyshev in PHP
`
public function doSmth(int $id, ?LoggerInterface $logger = null)`
источник

AM

Artem Molotov in PHP
Maksim Masiukevich
Если тебе в момент работы внезапно потребовалось поменять зависимость, то твое место в макдональдсе
Вот только это не "мне" может понадобиться, а кому-то/чему-то другому во время жизненного цикла аппки (но прыганье объекта туда сюда по проекту — тоже сомнительно)
источник

MM

Maksim Masiukevich in PHP
Artem Molotov
Вот только это не "мне" может понадобиться, а кому-то/чему-то другому во время жизненного цикла аппки (но прыганье объекта туда сюда по проекту — тоже сомнительно)
А у других есть декорация.
источник

MM

Maksim Masiukevich in PHP
И final модификатор, который встречается все чаще и запрещает хомякам творить дичь
источник

AM

Artem Molotov in PHP
Vladimir Chernyshev
да, как параметр обычного метода, которому вдруг понадобилась завсимость, типа callback
Так это и будет инъекцией. Видимо, ты имеешь ввиду ручную. От отсуствия автовайринга по аннотации инъекцией зависимости это не перестаёт быть.
источник

AM

Artem Molotov in PHP
Maksim Masiukevich
Ты указываешь интерфейс. А что там будет - всем похер, включая тебя
А если объект передают дальше и потом нужно снять какую-то зависимость или заменить её? Следующий обработчик в цепочке может и не знать как декорацию снять. Нет?
источник

AM

Artem Molotov in PHP
Не знаю насколько часто такой кейс бывает, но вот придумал
источник

MM

Maksim Masiukevich in PHP
Artem Molotov
А если объект передают дальше и потом нужно снять какую-то зависимость или заменить её? Следующий обработчик в цепочке может и не знать как декорацию снять. Нет?
Чо?
источник

MM

Maksim Masiukevich in PHP
Что значит снять/заменть?
источник