Выбор ответа Junior Laravel: контейнер и очереди обновлено

bind, singleton и scoped

Вопрос

Чем singleton отличается от scoped в контейнере Laravel?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: singleton живёт весь процесс, scoped сбрасывается между запросами. bind даёт новый объект при каждом разрешении, singleton один экземпляр на жизнь контейнера.

Варианты ответа

  1. singleton живёт весь процесс, scoped сбрасывается между запросамиправильный ответ
  2. Ничем: это синонимы, scoped оставлен для обратной совместимости
  3. scoped создаёт новый объект при каждом вызове make, как bind
  4. singleton работает только для интерфейсов, а scoped для классов

Разбор

bind даёт новый объект при каждом разрешении, singleton один экземпляр на жизнь контейнера. В обычном PHP-FPM контейнер создаётся заново на каждый запрос, и разница незаметна. Но в долгоживущих процессах (Laravel Octane, воркеры очередей) синглтон переживает запросы и может унести состояние одного пользователя в чужой запрос. scoped решает это: экземпляр сбрасывается между запросами и заданиями.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.