-
-
Notifications
You must be signed in to change notification settings - Fork 1
Feature Global registry
github-actions[bot] edited this page Jul 8, 2026
·
1 revision
ContainerRegistry даёт доступ к контейнеру приложения из мест, куда его неудобно прокинуть (helper-функции, legacy-код, фасады). Туториал — Global-registry.
ContainerRegistry — статический держатель ссылки на «текущий» контейнер приложения. На bootstrap контейнер регистрируется в реестре; затем глобальный код может получить его и достать сервис. Это осознанный escape hatch для интеграции с кодом, не поддерживающим DI.
// bootstrap:
$c = new Container();
// … настройка …
ContainerRegistry::set($c);
// где-то в helper/legacy, куда контейнер не прокинуть:
function logger(): LoggerInterface {
return ContainerRegistry::get()->get(LoggerInterface::class);
}- Мост к legacy и глобальным функциям, где внедрить контейнер нельзя.
- Основа для фасад-подобного API (как в Laravel).
- Простой доступ в скриптах/хелперах.
- Глобальное состояние — усложняет тестирование и параллелизм; по сути Service Locator.
- Скрывает зависимости: по сигнатуре не видно, что функция лезет в контейнер.
- Использовать только на границе с кодом, который нельзя перевести на конструктор-инъекцию (хелперы шаблонов, legacy).
- В тестах — подменять/сбрасывать реестр между кейсами для изоляции.
- Дёргать
ContainerRegistry::get()внутри доменных сервисов вместо конструктор-инъекции — это классический Service Locator. См. Анти-паттерны. - Полагаться на глобальный контейнер в многопоточных/долгоживущих сценариях без сброса состояния.
| Контейнер | Аналог |
|---|---|
| PHP-DI | нет нативного глобального реестра (❌) |
| Symfony | нет (глобальный доступ намеренно не поощряется) (❌) |
| Laravel |
app() / Facades — центральная часть подхода |
| Pimple | нет (❌) |
| Nette | нет (❌) |
CloudCastle, Laravel — явный глобальный доступ (используйте осознанно).
См. также: Global-registry (гайд) · Анти-паттерны.
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