PSR-11 контейнер внедрения зависимостей для PHP 8.1+: автовайринг, атрибуты (#[AsService], #[Autowire], #[Inject], декораторы, алиасы), компиляция контейнера в PHP-код, контекстные привязки, теги, области видимости, ленивые сервисы и профилирование.

Maintainers

Package info

gitverse.ru/cloud-castle/di

Homepage

Issues

Documentation

pkg:composer/cloud-castle/di

Transparency log

Statistics

Installs: 20

Dependents: 7

Suggesters: 2

v1.1.6 2026-07-29 08:35 UTC

This package is auto-updated.

Last update: 2026-07-30 05:51:30 UTC


README

🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano

CloudCastle Di

CloudCastle Di

Packagist Version Downloads PHP Version License

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() — иммутабельность контейнера после сборки; обнаружение циклов.

Коротко

Быстрый безфреймворковый DI-контейнер с автовайрингом, контекстными привязками, тегами, атрибутами, lazy и компиляцией — при единственной runtime-зависимости psr/container. По функционалу перекрывает объединение аналогов, лидирует по скорости разрешения и безопасности; по памяти — второй, вплотную за php-di.

Сравнение с аналогами

Все таблицы ниже сгенерированы автоматически из честных сравнительных тестов (benchmarks/compare.php) на ОДИНАКОВОЙ операции для всех аналогов, PHP 8.1.34, без Xdebug.

1. Функциональность

Возможность🏆 CloudCastlephp-dileagueilluminatepimple¹new¹
Автовайринг конструкторов
Контекстные привязки (when/needs/give)
Теги сервисов
Атрибуты / lazy / компиляция
Нулевые внешние зависимости (кроме psr/container)
Всего🏆 523311

2. Безопасность и корректность

Свойство🏆 CloudCastlephp-dileagueilluminatepimple¹new¹
Обнаружение циклических зависимостей
Заморозка контейнера (freeze)
Контрактные исключения PSR-11
Изоляция инстансов (нет глобального состояния)
Всего🏆 432011

3. Производительность

Разрешение свежего графа A→B→C, 200 000 раз (минимум из 4).

РешениеВремя (мс)Итог
new¹1 017базовый уровень (не библиотека)
pimple¹6 158,6базовый уровень (не библиотека)
🏆 CloudCastle9 548,1быстрейшее среди библиотек
php-di10 347,4аналог
league41 353,1аналог
illuminate45 586,8аналог

4. Потребление памяти

Фактически занятая память 50 000 удержанных разрешённых графов (изолированный процесс).

РешениеПиковая память (KB)Итог
🏆 php-di5 409легчайшее среди библиотек
CloudCastle5 483аналог
pimple¹11 517базовый уровень (не библиотека)
new¹11 517базовый уровень (не библиотека)
illuminate11 523аналог
league11 610аналог

¹ Базовый уровень (нативные вызовы/примитивы без полноты решения) показан для контекста и не претендует на победу среди библиотек-аналогов.

О памяти честно. Замер — фактически занятая память (memory_get_usage) при удержании 50 000 разрешённых графов-объектов в изолированном процессе (с gc до и после, не транзиентный пик). CloudCastle идёт вплотную за php-di (разница ~1%) и вдвое легче league/illuminate. Память — единственная ось, где пакет второй; по скорости, функционалу и безопасности он лидирует.

Плюсы, минусы и когда применять

Сильные стороны:

  • Функционал = объединение аналогов — автовайринг + контекстные привязки + теги + атрибуты/lazy/компиляция при одной runtime-зависимости (psr/container); ни один аналог не покрывает всё это сразу.
  • Быстрейшее автоматическое разрешение среди библиотек — быстрее php-di, league и illuminate на разрешении свежего графа A→B→C.
  • Безопасность — обнаружение циклов, заморозка контейнера (freeze), контрактные исключения PSR-11, изоляция инстансов без глобального состояния (лидер по безопасности).
  • Память — вплотную за самым лёгким php-di, вдвое легче league/illuminate.

Слабые стороны (честно):

  • Памятьphp-di примерно на 1% легче при удержании графов (в пределах шума); это небольшой компромисс ради скорости и богатства функционала.
  • Экосистема — у php-di и illuminate шире набор готовых интеграций и примеров.

Когда применять. Когда нужен быстрый, безопасный автовайринг-контейнер с контекстными привязками, тегами и атрибутами без привязки к фреймворку — как в доменных сервисах, так и в собственных микрофреймворках. Для тесной интеграции с Laravel удобнее illuminate/container.

Разработка

composer install
composer check    # линтеры + статический анализ + тесты
composer fix      # автоисправления (Rector, PHP CS Fixer, PHPCBF)
composer ci       # полный CI-пайплайн локально

Полный список команд с описаниями: composer run-script --list.

Документация

Лицензия

MIT © CloudCastle (alex-4-17@yandex.ru)

🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano