Production-ready PHP 8.1+ package (CloudCastle Di).
Package info
pkg:composer/cloud-castle/di
Requires
- php: >=8.1
- psr/container: ^2.0
Requires (Dev)
- deptrac/deptrac: ^3.0 || ^4.0
- ergebnis/composer-normalize: ^2.45
- friendsofphp/php-cs-fixer: ^3.75
- icanhazstring/composer-unused: ^0.9
- illuminate/container: ^10.0 || ^11.0
- infection/infection: ^0.29 || ^0.33
- league/container: ^4.2
- php-di/php-di: ^7.0
- php-parallel-lint/php-parallel-lint: ^1.4
- phpmd/phpmd: ^2.15
- phpstan/extension-installer: ^1.4
- phpstan/phpstan: ^1.12 || ^2.1
- phpstan/phpstan-deprecation-rules: ^1.2 || ^2.0
- phpstan/phpstan-phpunit: ^1.4 || ^2.0
- phpstan/phpstan-strict-rules: ^1.6 || ^2.0
- phpunit/phpunit: ^10.5 || ^11.5
- pimple/pimple: ^3.5
- psalm/plugin-phpunit: ^0.19 || ^0.20
- rector/rector: ^1.2 || ^2.0
- roave/security-advisories: dev-latest
- squizlabs/php_codesniffer: ^3.12 || ^4.0
- vimeo/psalm: ^6.0
- webmozart/assert: ^1.11
Provides
This package is auto-updated.
Last update: 2026-07-19 13:10:47 UTC
README
🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano
CloudCastle Di
PSR-11 контейнер внедрения зависимостей для PHP 8.1+: автовайринг, контекстные привязки, теги, атрибуты, ленивые сервисы, компиляция, скоупы/TTL, пул объектов и профилирование. Нулевые внешние зависимости (кроме
psr/container).
Установка
composer require cloud-castle/di
Требуется PHP 8.1+.
Быстрый старт
<?php
use CloudCastle\DI\Container;
$container = new Container();
// Явные фабрики (как у Pimple), но с типобезопасным разрешением.
$container->set(LoggerInterface::class, fn (): Logger => new Logger('/var/log/app.log'));
// Автовайринг: конструкторы разрешаются по типам без ручной проводки.
$container->enableAutowiring();
$service = $container->make(ReportService::class); // свежий экземпляр
$shared = $container->get(ReportService::class); // разделяемый (singleton)
// Привязка интерфейса к реализации.
$container->bind(CacheInterface::class, RedisCache::class);
// Контекстные привязки: разным потребителям — разные реализации.
$container->when(PhotoController::class)
->needs(FilesystemInterface::class)
->give(S3Filesystem::class);
// Теги и итерация по тегированным сервисам.
$container->tag(JsonReport::class, 'report');
$container->tag(CsvReport::class, 'report');
foreach ($container->getTaggedIterator('report') as $report) {
$report->render();
}
// Заморозка после сборки — защита от мутаций в рантайме.
$container->freeze();
Возможности
- PSR-11 контейнер:
get()/has(), совместим с любым PSR-11 потребителем. - Автовайринг конструкторов, свойств, методов и имён параметров (переключаемо).
- Контекстные привязки
when()->needs()->give()— разным потребителям разные зависимости. - Теги сервисов с приоритетом + итератор/локатор тегированных сервисов.
- Атрибуты
#[...]для регистрации и конфигурации сервисов. - Ленивые сервисы и lazy-ghost прокси (отложенная инициализация).
- Компиляция контейнера для продакшена, скоупы, TTL, пул объектов, профилирование и умный кэш разрешений.
freeze()— иммутабельность контейнера после сборки; обнаружение циклов.
Сравнение с аналогами
Все таблицы ниже сгенерированы автоматически из честных сравнительных
тестов (benchmarks/compare.php) на ОДИНАКОВОЙ операции для всех аналогов,
PHP 8.1.34, без Xdebug.
1. Функциональность
| Возможность | 🏆 CloudCastle | php-di | league | illuminate | pimple¹ | new¹ |
|---|---|---|---|---|---|---|
| Автовайринг конструкторов | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ |
| Контекстные привязки (when/needs/give) | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ |
| Теги сервисов | ✅ | ❌ | ✅ | ✅ | ❌ | ❌ |
| Атрибуты / lazy / компиляция | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ |
| Нулевые внешние зависимости (кроме psr/container) | ✅ | ❌ | ✅ | ❌ | ✅ | ✅ |
| Всего | 🏆 5 | 2 | 3 | 3 | 1 | 1 |
2. Безопасность и корректность
| Свойство | 🏆 CloudCastle | php-di | league | illuminate | pimple¹ | new¹ |
|---|---|---|---|---|---|---|
| Обнаружение циклических зависимостей | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ |
| Заморозка контейнера (freeze) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Контрактные исключения PSR-11 | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ |
| Изоляция инстансов (нет глобального состояния) | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ |
| Всего | 🏆 4 | 3 | 2 | 0 | 1 | 1 |
3. Производительность
Разрешение свежего графа A→B→C, 200 000 раз (минимум из 4).
| Решение | Время (мс) | Итог |
|---|---|---|
| new¹ | 44,2 | базовый уровень (не библиотека) |
| 🏆 CloudCastle | 336,4 | быстрейшее среди библиотек |
| pimple¹ | 353,6 | базовый уровень (не библиотека) |
| php-di | 368,4 | аналог |
| illuminate | 1 221,5 | аналог |
| league | 1 503,3 | аналог |
4. Потребление памяти
Пик памяти на 200 000 разрешений (изолированный процесс).
| Решение | Пиковая память (KB) | Итог |
|---|---|---|
| 🏆 php-di | 7 573 | быстрейшее среди библиотек |
| league | 7 573 | аналог |
| illuminate | 7 573 | аналог |
| pimple¹ | 7 573 | базовый уровень (не библиотека) |
| new¹ | 7 573 | базовый уровень (не библиотека) |
| CloudCastle | 7 654 | аналог |
¹ Базовый уровень (нативные вызовы/примитивы без полноты решения) показан для контекста и не претендует на победу среди библиотек-аналогов.
Разработка
composer install
composer check # линтеры + статический анализ + тесты
composer fix # автоисправления (Rector, PHP CS Fixer, PHPCBF)
composer ci # полный CI-пайплайн локально
Полный список команд с описаниями: composer run-script --list.
Документация
- Репозиторий: https://gitverse.ru/cloud-castle/di
- История изменений: CHANGELOG.md
- Как внести вклад: CONTRIBUTING.md
- Кодекс поведения: CODE_OF_CONDUCT.md
- Политика безопасности: SECURITY.md
Лицензия
MIT © CloudCastle (alex-4-17@yandex.ru)
🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano