Выбор ответа Junior Laravel: контейнер и очереди спрашивают часто обновлено
Автоматическое внедрение в Laravel
Вопрос
Контроллер принимает в конструкторе OrderService, который нигде не зарегистрирован. Что сделает контейнер Laravel?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Создаст его сам через рефлексию, разрешив зависимости (auto-wiring). Контейнер умеет создавать конкретные классы без регистрации: читает типы параметров конструктора и разрешает их рекурсивно.
Варианты ответа
- Бросит исключение: каждый класс нужно регистрировать в провайдере
- Передаст
null, и ошибка возникнет при первом вызове метода - Создаст синглтон на всё время работы приложения и закеширует
- Создаст его сам через рефлексию, разрешив зависимости (auto-wiring)правильный ответ
Разбор
Контейнер умеет создавать конкретные классы без регистрации: читает типы параметров конструктора и разрешает их рекурсивно. Регистрация нужна для интерфейсов (bind(PaymentGateway::class, StripeGateway::class)), синглтонов и классов со скалярными параметрами. По умолчанию каждый make создаёт новый объект.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.