Если в коде появляются
new, которые плодят жёсткие зависимости — пора разобраться с внедрением зависимостей (Dependency Injection) и понять, как работает DI-контейнер.📌 Что в статье:
🧱 Часть 1: от жёстких связей к своему DI-контейнеру
🔸 Почему
Cart не должен сам создавать SimpleCalculator и SimpleStorage🔸 Как перейти от конкретных реализаций к интерфейсам и внедрению зависимостей через конструктор
🔸 Что такое инверсия зависимостей (DIP) и как DI помогает её реализовать
🔸 Пошаговая реализация собственного DI-контейнера с autowiring: внедрение зависимостей через рефлексию, поддержка singleton/prototype, регистрация скалярных параметров, реализация PSR-11
⚙️ Часть 2: как это делают фреймворки
💡 Symfony
Ручная регистрация, YAML-конфигурации, autowire/autoconfigure — полный контроль.
💡 Laravel
Контейнер
Illuminate\Container, удобные bind() и singleton(), быстрая интеграция.💡 Yii3
Контейнер через массив конфигураций, работа с
Reference, интеграция с yiisoft/injector.🔍 В итоге:
Пошагово разобрано, как перейти от жёстких зависимостей к гибкому DI.
Создан мини-контейнер с поддержкой автосборки зависимостей
📚 Отличный материал для начинающих и тех, кто хочет разобраться в архитектуре фреймворков на более глубоком уровне.
👉 Хабр