thruster / container
Thruster 容器组件
1.1.0
2016-05-31 15:41 UTC
Requires
- php: >=7.0
- container-interop/container-interop: ^1.1
Requires (Dev)
- phpunit/phpunit: ~5.1
This package is auto-updated.
Last update: 2024-09-14 02:40:54 UTC
README
[] (https://github.com/ThrusterIO/container/releases) [
] (LICENSE) [
] (https://travis-ci.org/ThrusterIO/container) [
] (https://scrutinizer-ci.com/g/ThrusterIO/container) [
] (https://scrutinizer-ci.com/g/ThrusterIO/container) [
] (https://packagist.org.cn/packages/thruster/container)
Thruster 容器组件。容器是一个小巧的自包含依赖注入容器,实现了 ContainerInterface
接口。
安装
通过 Composer
$ composer require thruster/container
用法
只需创建一个 Container 实例
<?php use Thruster\Component\Container; $container = new Container();
您还可以将预置值数组传递给构造函数。
<?php use Thruster\Component\Container; $values = [ 'render.engine' => function ($container) { return new RenderEngine($container->get('translation.engine')); }, 'translation.engine' => function () { return new TranslationEngine(); } ]; $container = new Container($values);
容器提供了一组简单的命名函数来使用容器:has、set、get、remove
<?php use Thruster\Component\Container; $container = new Container(); $container->has('render.engine'); // = false $container->set('render.engine', function ($container) { return new RenderEngine($container->get('translation.engine')); }); $container->has('render.engine'); // = true $renderEngine = $container->get('render.engine'); $container->remove('render.engine'); $container->has('render.engine'); // = false
容器还支持 \ArrayAccess
<?php use Thruster\Component\Container; $container = new Container(); isset($container['render.engine']); // = false $container['render.engine'] = function ($container) { return new RenderEngine($container->get('translation.engine')); }; isset($container['render.engine']); // = true $renderEngine = $container['render.engine']; unset($container['render.engine']); isset($container['render.engine']); // = false
默认情况下,容器始终返回相同标识符的同一实例,但您可以创建一个工厂定义,该定义将始终返回新实例的标识符。
<?php use Thruster\Component\Container; $container = new Container(); $i = 1; $value = function () use ($i) { return $i++; } $factoryValue = function () use (&$i) { return $i++; } $container->set('normal', $value); $container->get('normal'); // = 1 $container->get('normal'); // = 1 $container->set('factory', $factoryValue); $container->get('factory'); // = 1 $container->get('factory'); // = 2
容器提供了通过 ContainerProviderInterface
扩展容器的方式
<?php use Thruster\Component\Container; use Thruster\Component\ContainerProviderInterface; $container = new Container(); $provider = new class implements ContainerProviderInterface { public function register(Container $container) { $container->set(....); } }; $container->addProvider($provider);
错误
- 如果标识符在容器中未找到,容器将抛出
NotFoundException
- 当尝试为已冻结的标识符设置定义时,容器将抛出
IdentifierFrozenException
。(冻结表示值已使用过一次)
测试
$ composer test
贡献
许可证
有关更多信息,请参阅许可证文件。