-
-
Notifications
You must be signed in to change notification settings - Fork 1
Feature Prototypes
make($id) возвращает свежий экземпляр на каждый вызов, минуя singleton-кэш. Прототип-семантика для сервисов с состоянием.
В отличие от get(), make() не читает и не пишет resolved: он всегда заново вызывает фабрику или заново autowire-ит класс. Fast-path make() при выключенных opt-in фичах (пул, профилирование) — прямой вызов Closure-фабрики или autowire без лишних проверок, поэтому прототипы в CloudCastle быстрее всех аналогов (см. Производительность).
$c->set(Report::class, fn () => new Report());
$c->make(Report::class) === $c->make(Report::class); // false — каждый раз новый
// autowiring тоже работает через make():
$c->enableAutowiring();
$dto = $c->make(RequestDto::class); // свежий граф зависимостей- Свежее состояние: каждый вызов — чистый объект, безопасно для DTO, команд, билдеров.
-
Autowiring на лету:
make(FQCN)собирает граф без явной регистрации. - Быстрее конкурентов в режиме transient (фабрика/свежий экземпляр).
- Нет кэша — для дорогих в создании объектов каждый
make()платит полную цену. - Легко перепутать с
get():make()не singleton, состояние между вызовами не сохраняется.
- Использовать
make()для объектов «одноразового» назначения: DTO, команды, value-объекты, билдеры запросов. - Комбинировать с scope, когда нужен «singleton в пределах запроса, но новый на следующий».
- Звать
make()в горячем цикле для дорогого сервиса (клиент БД, HTTP) — используйте singletonget(). - Ожидать, что изменения объекта из
make()увидит другой код, — это разные экземпляры.
| Контейнер | Аналог |
|---|---|
| PHP-DI |
make() — тот же смысл (свежий экземпляр с autowiring) |
| Symfony |
shared: false в определении сервиса |
| Laravel |
make() при bind() (не singleton()) |
| Pimple |
$c->factory(fn () => …) — помечает как non-shared ( |
| Nette |
false shared / create*() фабрики |
Все кроме Pimple имеют полноценные прототипы; Pimple — только через factory().
См. также: Фабрики и singleton · Scoped-сервисы.
CloudCastle DI · · PHP 8.1+ · PSR-11
GitHub · Packagist · Releases · Discussions · Сравнение
Исходники Wiki — каталог wiki/ в репозитории (синхронизация через GitHub Actions)
- 🏗️ Архитектура
- ⚡ Быстрый старт
- 📊 Сравнение — 5 аналогов, таблица + победители
- 🧩 Возможности (детально) — каждая фича: принцип, +/−, аналоги
- 🧪 Bootstrap
- 🚀 Compiled container
- 🔗 Contextual binding
- 🤖 Autowiring
- 📄 Конфигурация
- 📖 Справочник конфигурации
- 📂 Сканирование классов
- 🌍 Глобальный реестр
- 🏷️ Теги и декораторы
- 🔗 call(), bind(), hooks
- 🔄 Прототипы, alias, lazy, lazyGhost
- 📋 Справочник API
- 🏭 Фабрики и singleton