Production-ready PHP 8.1+ package (CloudCastle Di).

Maintainers

Package info

gitverse.ru/cloud-castle/di

Homepage

Issues

Documentation

pkg:composer/cloud-castle/di

Transparency log

Statistics

Installs: 18

Dependents: 9

Suggesters: 0

v1.1.0 2026-07-19 12:06 UTC

This package is auto-updated.

Last update: 2026-07-19 13:10:47 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() — иммутабельность контейнера после сборки; обнаружение циклов.

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

Все таблицы ниже сгенерированы автоматически из честных сравнительных тестов (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¹44,2базовый уровень (не библиотека)
🏆 CloudCastle336,4быстрейшее среди библиотек
pimple¹353,6базовый уровень (не библиотека)
php-di368,4аналог
illuminate1 221,5аналог
league1 503,3аналог

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

Пик памяти на 200 000 разрешений (изолированный процесс).

РешениеПиковая память (KB)Итог
🏆 php-di7 573быстрейшее среди библиотек
league7 573аналог
illuminate7 573аналог
pimple¹7 573базовый уровень (не библиотека)
new¹7 573базовый уровень (не библиотека)
CloudCastle7 654аналог

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

Разработка

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