-
-
Notifications
You must be signed in to change notification settings - Fork 1
API reference
Финальный класс, реализующий CloudCastle\DI\Contract\ContainerInterface.
Возвращает сервис по идентификатору.
Порядок разрешения:
- Разрешение alias → конечный id.
- Singleton-кэш (
resolved) — если уже создан. - Явное определение (
set()) — фабрика или экземпляр. - Autowiring — если id зарегистрирован через
autowire()или включён глобальный autowiring и id — instantiable FQCN. -
NotFoundException— если ничего не подошло.
Для фабрики (callable):
- вызывается один раз, в аргумент передаётся
$this; - результат кэшируется (кроме
null— см. ниже); - к id применяются зарегистрированные декораторы перед кэшированием.
Исключения:
| Исключение | Когда |
|---|---|
NotFoundException |
id не зарегистрирован и autowiring недоступен |
ContainerException |
ошибка autowiring, циклическая зависимость, несоздаваемый класс |
true, если сервис:
- зарегистрирован через
set(); - уже создан (есть в кэше);
- зарегистрирован как alias;
-
или может быть создан через autowiring (
autowire()/ глобальный режим + instantiable class).
Регистрирует сервис:
- готовый экземпляр или скаляр;
- фабрику
callable(ContainerInterface): mixed.
При повторном set() с тем же id сбрасывается singleton-кэш.
Явный set() имеет приоритет над autowiring для того же id.
true, если есть:
- регистрация через
set()(включая callable); -
или явная регистрация через
autowire(); - или id зарегистрирован как alias.
Не учитывает только singleton-кэш без definition. Не означает, что get() уже вызывался.
Включает создание instantiable-классов по FQCN при get() без явного set().
Отключает глобальный autowiring. Классы, зарегистрированные через autowire(), остаются доступны.
Состояние глобального autowiring.
Включает разрешение параметров по имени ($logger → id 'logger'), если has($name).
Отключает autowiring по имени параметра.
Состояние autowiring по имени параметра (по умолчанию false). Применяется к параметрам конструктора, свойствам и методам.
Включает autowiring typed properties после конструктора. Свойства с #[Inject] / #[Autowire] внедряются всегда, независимо от флага.
Отключает autowiring свойств по типу.
Состояние autowiring свойств (по умолчанию false).
Включает вызов public/protected inject-методов (setter и др.) с параметрами. Методы с attributes вызываются всегда.
Отключает autowiring методов по умолчанию.
Состояние autowiring методов (по умолчанию false).
Регистрирует класс для autowiring (id = FQCN). Сбрасывает singleton-кэш для этого id.
Исключение: ContainerException, если класс не найден или не instantiable (abstract, interface, …).
Сканирует каталог и вызывает autowire() для каждого найденного instantiable-класса, кроме id с уже существующим set().
Исключение: ContainerException, если каталог не найден.
Подробнее — Сканирование классов, Autowiring.
Создаёт новый экземпляр при каждом вызове. Не заполняет singleton-кэш. Декораторы и alias — как у get().
Исключения: те же, что у get().
Регистрирует альтернативный id. get($alias) и make($alias) разрешают $targetId (с учётом цепочек).
Исключение: ContainerException при циклической цепочке alias.
Возвращает обёртку; первый getValue() вызывает $container->get($serviceId) и кэширует результат внутри LazyService.
Подробнее — Прототипы, alias и lazy.
Вызывает callable с autowiring параметров через CallableInvoker и MemberResolver.
Поддерживаемые формы: Closure, first-class callable, [object, 'method'], invokable-объект, имя глобальной функции.
Порядок разрешения параметра: явное значение в $parameters → PHP attributes → autowiring по имени (если включён) → разрешение по типу.
Исключение: ContainerException, если обязательный параметр не разрешается.
$concrete |
Действие |
|---|---|
| instantiable class |
autowire($concrete) + alias($abstract, $concrete)
|
| зарегистрированный id / autowire / interface с autowiring | alias($abstract, $concrete) |
| иначе | ContainerException |
Эквивалент цикла set($id, $concrete) для каждой пары массива. Сбрасывает singleton-кэш для каждого id, как set().
callable(string $id, mixed $instance, ContainerInterface $container): void после нового создания при get() / make().
- повторный
get()из singleton-кэша — без callback; - каждый
make()— callback снова; - несколько callback — порядок регистрации.
Подробнее — call(), bind(), afterResolving.
Регистрирует пользовательский PHP attribute, реализующий CloudCastle\DI\Contract\ServiceIdAttribute. После регистрации attribute обрабатывается так же, как встроенные Inject / Autowire (конструктор, свойства, методы).
Встроенные Inject и Autowire регистрировать не нужно.
Запрещает изменение определений (set, autowire, alias, tag, decorate, bind, scan, addDefinitions, afterResolving, registerAttribute, переключатели autowiring). get(), make(), call() работают. Идемпотентен.
true после freeze().
list<string> — все id из definitions, autowire и alias (отсортированы, без дубликатов). Без создания сервисов.
Снимок состояния для отладки: frozen, definitions, autowired, aliases, tags, decorators, resolved, флаги autowiring. Без вызова get() для неразрешённых сервисов.
Привязывает id к тегу. Повтор с тем же id и тегом не дублирует.
array<string, mixed> — сервисы с тегом в порядке tag(). Id без definition и без autowiring пропускаются.
list<string> — только id в порядке tag(), без вызова get().
IteratorAggregate — только значения сервисов (порядок tag()). Пропускает недоступные id, как getTagged().
get($id) / has($id) внутри тега + итерация id => instance через getIterator().
Исключение: NotFoundException из TaggedServiceLocator::get() для id вне тега или недоступного сервиса.
(mixed $inner, ContainerInterface $container): mixed — обёртка при get() и make(). Порядок: первый зарегистрированный декоратор ближе к inner. Сбрасывает singleton-кэш id.
Опциональный сервис загрузки и применения конфигурации. Не входит в Container — создаётся отдельно.
| Метод | Описание |
|---|---|
configure(ContainerInterface, array $sources): void |
Загрузить, объединить, применить |
loadMany(array $sources): array |
Слияние без применения |
load(string $path): array |
Один файл |
apply(ContainerInterface, array $config): void |
Применить массив |
$sources — list<string|ConfigurationSource>.
Подробнее — Configuration.
| Свойство | Описание |
|---|---|
path |
Путь к файлу |
priority |
?int — приоритет слоя при слиянии |
Контракт пользовательского attribute с методом serviceId(): ?string. Регистрация: Container::registerAttribute().
Внутренний реестр известных attributes (встроенные + зарегистрированные). Используется Autowirer / MemberResolver.
Внутренний класс; создаётся лениво в Container::call().
Вызывает callable с autowiring параметров через MemberResolver (тот же путь, что у конструктора Autowirer).
| Метод | Описание |
|---|---|
invoke(callable, array $parameters = []): mixed |
Собирает аргументы и вызывает callable |
Исключение: ContainerException — неразрешимый параметр или некорректный callable.
Внутренний класс; хранит callback для Container::afterResolving().
| Метод | Описание |
|---|---|
register(string $id, callable $callback): void |
Добавляет callback в очередь для id |
dispatch(string $id, mixed $instance, ContainerInterface $container): void |
Вызывает все callback для id |
IteratorAggregate<int, mixed> — итератор значений сервисов одного тега.
Создаётся через Container::getTaggedIterator(). При итерации делегирует getTagged() — недоступные id пропускаются.
Экземпляры в порядке tag(), без ключей id.
IteratorAggregate<string, mixed> — доступ к сервисам тега по id.
Снимок id фиксируется в конструкторе (getTaggedIds()). Создаётся через Container::getTaggedLocator().
| Метод | Описание |
|---|---|
has(string $id): bool |
id в теге и container->has($id)
|
get(string $id): mixed |
container->get($id) |
getIterator(): Traversable<string, mixed> |
id => instance через getTagged()
|
Исключение: NotFoundException из get() — id не в теге или сервис недоступен.
Откладывает Container::get($serviceId) до первого вызова; повторные вызовы возвращают тот же экземпляр из внутреннего кэша обёртки.
Внутренний класс; используется Container::alias().
| Метод | Описание |
|---|---|
alias(string $alias, string $targetId): void |
Регистрация alias |
resolve(string $id): string |
Конечный id после цепочки |
isAlias(string $id): bool |
Зарегистрирован ли id как alias |
Внутренний класс; создаёт экземпляры для get() / make() (с опциональным singleton-кэшированием).
PHP attribute для параметра конструктора, свойства, метода или параметра метода. Явный id: #[Inject('app.clock')]. Без id — fallback на autowiring по имени (если включён) и по типу.
Аналог Inject с синтаксисом #[Autowire(service: 'mailer')]. Targets: PARAMETER | PROPERTY | METHOD.
Внутренний класс; создаётся контейнером лениво.
Создаёт экземпляр: конструктор → свойства → методы. Обычно через Container::get(), не напрямую.
Связанные классы: MemberResolver, PropertyInjector, MethodInjector, ParameterTypeResolver.
list<string> — FQCN instantiable-классов в каталоге. Используется Container::scan().
Исключение: ContainerException, если каталог не существует.
| Метод | Описание |
|---|---|
set(ContainerInterface $container): void |
Устанавливает глобальный контейнер |
get(): ContainerInterface |
Возвращает контейнер |
has(): bool |
Инициализирован ли реестр |
reset(): void |
Сброс (тесты) |
Исключение: ContainerException из get(), если set() не вызывался.
interface ContainerInterface extends \Psr\Container\ContainerInterface
{
public function set(string $id, mixed $concrete): void;
public function hasDefinition(string $id): bool;
public function tag(string $id, string $tag): void;
/** @return array<string, mixed> */
public function getTagged(string $tag): array;
public function decorate(string $id, callable $decorator): void;
public function enableAutowiring(): void;
public function disableAutowiring(): void;
public function isAutowiringEnabled(): bool;
public function enableParameterNameAutowiring(): void;
public function disableParameterNameAutowiring(): void;
public function isParameterNameAutowiringEnabled(): bool;
public function enablePropertyAutowiring(): void;
public function disablePropertyAutowiring(): void;
public function isPropertyAutowiringEnabled(): bool;
public function enableMethodAutowiring(): void;
public function disableMethodAutowiring(): void;
public function isMethodAutowiringEnabled(): bool;
public function autowire(string $className): void;
public function scan(string $directory, ?string $namespace = null): void;
public function make(string $id): mixed;
public function alias(string $alias, string $targetId): void;
public function lazy(string $serviceId): \CloudCastle\DI\LazyService;
public function addDefinitions(array $definitions): void;
public function bind(string $abstract, string $concrete): void;
public function call(callable $callable, array $parameters = []): mixed;
public function afterResolving(string $id, callable $callback): void;
/** @return list<string> */
public function getTaggedIds(string $tag): array;
public function getTaggedIterator(string $tag): \CloudCastle\DI\TaggedServiceIterator;
public function getTaggedLocator(string $tag): \CloudCastle\DI\TaggedServiceLocator;
}| Класс | Когда |
|---|---|
NotFoundException |
get() — сервис недоступен |
ContainerException |
autowiring, alias, scan, registry, PSR-11 container error |
Обе реализуют интерфейсы PSR-11.
| Сценарий | Поведение |
|---|---|
| Фабрика вызвана | результат кэшируется до set() / decorate()
|
set('id', null) |
не считается регистрацией (isset в PHP) |
Фабрика / autowire вернули null после декораторов |
не кэшируется |
| Цикл A→B→A в фабриках | не обнаруживается |
| Цикл при autowiring | ContainerException |
make() |
новый экземпляр, кэш не заполняется |
afterResolving() |
только при новом создании, не из singleton-кэша |
make() + afterResolving()
|
callback на каждый make()
|
| Циклический alias |
ContainerException при alias() или resolve()
|
scan() + существующий set(FQCN)
|
set() сохраняется, scan пропускает id |
Подробнее — Фабрики и singleton, Autowiring.
CloudCastle DI · Репозиторий · Packagist · Releases · Discussions · Issues
Исходники Wiki — wiki/ в репозитории (синхронизация через Actions).
- Архитектура
- Быстрый старт
- Сравнение с PHP-DI, Symfony, Pimple — пошагово
- Примеры bootstrap
- Autowiring
- Конфигурация из файлов
- Сканирование классов
- Глобальный реестр
- Теги и декораторы
- call(), bind(), afterResolving
- Прототипы, alias и lazy
- Справочник API
- Фабрики и singleton
- Тестирование
- Тесты безопасности
- Нагрузка и производительность
- Анти-паттерны