-
-
Notifications
You must be signed in to change notification settings - Fork 1
Feature Freeze
github-actions[bot] edited this page Jul 8, 2026
·
1 revision
freeze() переводит контейнер в режим «только чтение»: после сборки графа любые изменения определений запрещены.
freeze() выставляет флаг frozen. Все мутирующие методы (set, bind, alias, tag, decorate, scoped, включение autowiring и т.д.) вызывают assertMutable() и бросают исключение, если контейнер заморожен. Разрешение сервисов (get / make / call) продолжает работать. isFrozen() сообщает состояние.
$c->set(Db::class, fn () => new Db());
$c->enableAutowiring();
$c->freeze(); // граф собран, дальше — только чтение
$c->isFrozen(); // true
$c->get(Db::class); // OK
$c->set('x', 1); // ContainerException: контейнер заморожен- Защита от случайных изменений после bootstrap — конфигурация контейнера становится контрактом.
- Ясная граница между фазой сборки и фазой работы приложения.
- Помогает в долгоживущих процессах: гарантия, что граф не «поплывёт» в рантайме.
- Нельзя динамически до-регистрировать сервисы после заморозки (это by design).
- Не влияет на изменяемость самих экземпляров — замораживаются определения, а не состояние объектов.
- Вызывать
freeze()в конце bootstrap, перед обработкой запросов/команд. - В тестах — проверять, что критичные сервисы зарегистрированы, затем
freeze()для fail-safe.
- Полагаться на до-регистрацию сервисов «по требованию» в рантайме вместо явного графа на старте.
- Ловить исключение заморозки, чтобы «обойти» её и всё-таки изменить контейнер.
| Контейнер | Аналог |
|---|---|
| PHP-DI | нет явного freeze ( |
| Symfony |
compile() у ContainerBuilder — после компиляции контейнер неизменяем |
| Laravel | нет (❌) |
| Pimple | нет (❌) |
| Nette | скомпилированный контейнер неизменяем (✅) |
CloudCastle, Symfony, Nette — явная иммутабельность.
См. также: Compiled container · dump().
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