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

Автоматическое внедрение в Laravel

Вопрос

Контроллер принимает в конструкторе OrderService, который нигде не зарегистрирован. Что сделает контейнер Laravel?

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

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

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

Коротко

Правильный ответ: Создаст его сам через рефлексию, разрешив зависимости (auto-wiring). Контейнер умеет создавать конкретные классы без регистрации: читает типы параметров конструктора и разрешает их рекурсивно.

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

  1. Бросит исключение: каждый класс нужно регистрировать в провайдере
  2. Передаст null, и ошибка возникнет при первом вызове метода
  3. Создаст синглтон на всё время работы приложения и закеширует
  4. Создаст его сам через рефлексию, разрешив зависимости (auto-wiring)правильный ответ

Разбор

Контейнер умеет создавать конкретные классы без регистрации: читает типы параметров конструктора и разрешает их рекурсивно. Регистрация нужна для интерфейсов (bind(PaymentGateway::class, StripeGateway::class)), синглтонов и классов со скалярными параметрами. По умолчанию каждый make создаёт новый объект.

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

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