Простой контейнер зависимостей, соответствующий стандарту PSR-11. Реализует автосвязывание и кэширование.
- PHP 8.2 или более поздняя версия
Установка через Composer:
composer require bcchicr/di-container
use Bcchicr\Container\Container;
$container = new Container();
/**
* Зарегистрировать вызываемое значение в качестве определения зависимости
*
* @param string $id
* @param callable $callback
* @return void
*/
$container->register($id, function(ContainerInterface $container) {
return 'dependency';
});
/**
* Зарегистрировать зависимость непосредственно
*
* @param string $id
* @param mixed $instance
* @return void
*/
$container->instance($id, 'instance');
/**
* Возвращает 'true` если зависимость с указанным ID может быть получена из контейнера
*
* @param string $id
* @return bool
*/
$container->has($id);
/**
* Возвращает зависимость с указанным ID
*
* @param string $id
* @return mixed
* @throws Bcchicr\Container\Exception\NotFoundException Если ID неизвестен контейнеру
* @throws Bcchicr\Container\Exception\ContainerGetException Если не получается получить зависимость из определения
*/
$container->get($id);
$dep1 = $container->get($id);
$dep2 = $container->get($id);
$dep1 === $dep2 // true
$dep1 = $container->get(SomeClass::class);
Оно возможно, если:
- Конструктор получаемого объекта не содержит параметров
- Параметры конструктора получаемого объекта имеют значения по умолчанию
- Параметры конструктора являются объектами, доступными для получения из контейнера (В т.ч. через автосвязывание)