-
-
Notifications
You must be signed in to change notification settings - Fork 1
API reference
Финальный класс, реализующий CloudCastle\DI\Contract\ContainerInterface.
Возвращает сервис по идентификатору.
Порядок разрешения:
- Singleton-кэш (
resolved) — если уже создан. - Явное определение (
set()) — фабрика или экземпляр. - Autowiring — если id зарегистрирован через
autowire()или включён глобальный autowiring и id — instantiable FQCN. -
NotFoundException— если ничего не подошло.
Для фабрики (callable):
- вызывается один раз, в аргумент передаётся
$this; - результат кэшируется (кроме
null— см. ниже); - к id применяются зарегистрированные декораторы перед кэшированием.
Исключения:
| Исключение | Когда |
|---|---|
NotFoundException |
id не зарегистрирован и autowiring недоступен |
ContainerException |
ошибка autowiring, циклическая зависимость, несоздаваемый класс |
true, если сервис:
- зарегистрирован через
set(); - уже создан (есть в кэше);
-
или может быть создан через autowiring (
autowire()/ глобальный режим + instantiable class).
Регистрирует сервис:
- готовый экземпляр или скаляр;
- фабрику
callable(ContainerInterface): mixed.
При повторном set() с тем же id сбрасывается singleton-кэш.
Явный set() имеет приоритет над autowiring для того же id.
true, если есть:
- регистрация через
set()(включая callable); -
или явная регистрация через
autowire().
Не учитывает только 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.
Привязывает id к тегу. Повтор с тем же id и тегом не дублирует.
array<string, mixed> — сервисы с тегом в порядке tag(). Id без definition и без autowiring пропускаются.
(mixed $inner, ContainerInterface $container): mixed — обёртка при get(). Порядок: первый зарегистрированный декоратор ближе к inner. Сбрасывает singleton-кэш id.
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;
}| Класс | Когда |
|---|---|
NotFoundException |
get() — сервис недоступен |
ContainerException |
autowiring, scan, registry, PSR-11 container error |
Обе реализуют интерфейсы PSR-11.
| Сценарий | Поведение |
|---|---|
| Фабрика вызвана | результат кэшируется до set() / decorate()
|
set('id', null) |
не считается регистрацией (isset в PHP) |
Фабрика / autowire вернули null после декораторов |
не кэшируется |
| Цикл A→B→A в фабриках | не обнаруживается |
| Цикл при autowiring | ContainerException |
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
- Тестирование
- Тесты безопасности
- Нагрузка и производительность
- Анти-паттерны