Выбор ответа Junior Laravel: контейнер и очереди обновлено
bind, singleton и scoped
Вопрос
Чем singleton отличается от scoped в контейнере Laravel?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: singleton живёт весь процесс, scoped сбрасывается между запросами. bind даёт новый объект при каждом разрешении, singleton один экземпляр на жизнь контейнера.
Варианты ответа
singletonживёт весь процесс,scopedсбрасывается между запросамиправильный ответ- Ничем: это синонимы,
scopedоставлен для обратной совместимости scopedсоздаёт новый объект при каждом вызовеmake, какbindsingletonработает только для интерфейсов, аscopedдля классов
Разбор
bind даёт новый объект при каждом разрешении, singleton один экземпляр на жизнь контейнера. В обычном PHP-FPM контейнер создаётся заново на каждый запрос, и разница незаметна. Но в долгоживущих процессах (Laravel Octane, воркеры очередей) синглтон переживает запросы и может унести состояние одного пользователя в чужой запрос. scoped решает это: экземпляр сбрасывается между запросами и заданиями.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.