webino / instance-container
类实例容器的实现。
Requires
- php: ~7.1
- psr/container: 1.*
- webino/event-emitter: 1.*
- webino/exceptions: 1.*
Requires (Dev)
- nette/tester: 1.*
- phpstan/phpstan: 0.*
- squizlabs/php_codesniffer: 3.*
- tracy/tracy: 2.*
This package is auto-updated.
Last update: 2024-08-29 05:12:34 UTC
README
实例容器实现。
推荐用法
实例容器应在工厂中使用以解决新的类实例依赖项。不建议直接将其注入到对象中。
设置
composer require webino\instance-container
快速使用
获取相同的类实例
use Webino\InstanceContainer; class TestInstance { } $instances = new InstanceContainer; $testInstance = $instances->get(TestInstance::class);
创建新的类实例
use Webino\InstanceContainer; class TestInstance { public function __construct(stdClass $dependency) { } } $instances = new InstanceContainer; $testInstance = $instances->make(TestInstance::class, new stdClass);
通过工厂方法获取类实例
use Webino\InstanceContainer; use Webino\CreateInstanceEventInterface; use Webino\InstanceFactoryMethodInterface; class TestInstance implements InstanceFactoryMethodInterface { public static function create(CreateInstanceEventInterface $event) { $container = $event->getContainer(); return new static($container->get(stdClass::class)); } public function __construct(stdClass $dependency) { } } $instances = new InstanceContainer; $testInstance = $instances->get(TestInstance::class);
设置类实例
use Webino\InstanceContainer; class TestInstance { } $instances = new InstanceContainer; $instances->set(TestInstance::class, new TestInstance);
取消设置类实例
use Webino\InstanceContainer; class TestInstance { } $instances = new InstanceContainer; $instances->set(TestInstance::class, null);
绑定工厂类
use Webino\InstanceContainer; use Webino\CreateInstanceEventInterface; class TestInstanceFactory implements InstanceFactoryInterface { public function createInstance(CreateInstanceEventInterface $event) { $container = $event->getContainer(); return new TestInstance($container->get(stdClass::class)); } } class TestInstance { public function __construct(stdClass $dependency) { } } $instances = new InstanceContainer; $instances->bind(TestInstance::class, TestInstanceFactory::class); $testInstance = $instances->get(TestInstance::class);
绑定回调工厂
use Webino\InstanceContainer; use Webino\CreateInstanceEventInterface; class TestInstance { public function __construct(stdClass $dependency) { } } $instances = new InstanceContainer; $instances->bind(TestInstance::class, function (CreateInstanceEventInterface $event) { $container = $event->getContainer(); return new TestInstance($container->get(stdClass::class)); }); $testInstance = $instances->get(TestInstance::class);
获取接口默认类实例
use Webino\InstanceContainer; interface TestInstanceInterface { } class TestInstance implements TestInstanceInterface { public function __construct(stdClass $dependency) { } } $instances = new InstanceContainer; $testInstance = $instances->get(TestInstanceInterface::class);
将别名接口设置为类
use Webino\InstanceContainer; interface TestAliasInterface { } class TestInstance implements TestAliasInterface { public function __construct(stdClass $dependency) { } } $instances = new InstanceContainer; $instances->alias(TestInstance::class, TestAliasInterface::class); $testInstance = $instances->get(TestAliasInterface::class);
实例创建事件处理
use Webino\InstanceContainer; use Webino\CreateInstanceEvent; class TestInstance { public $foo = false; } $instances = new InstanceContainer; $instances->on(CreateInstanceEvent::class, function (CreateInstanceEvent $event) { $instance = $event->getInstance(); $instance->foo = true; }); $testInstance = $instances->get(TestAliasInterface::class);
API
InstanceContainer
-
bool has(string $id)
如果容器可以为给定标识符返回实例,则返回 true,否则返回 false。 -
mixed get(string $id)
通过其标识符返回容器的条目实例。 -
void set(string $id, mixed $instance)
设置条目实例。 -
mixed make(string $id, array<int, mixed> ...$parameter)
创建新实例。 -
void bind(string $id, mixed $binding)
将提供者绑定到条目实例。 -
void alias(string $id, string $alias)
为条目实例设置别名。
CreateInstanceEvent
-
InstanceContainerInterface getContainer()
返回实例容器。 -
string getClass()
返回实例类。 -
array getParameters()
返回实例创建参数。
InstanceFactory
- mixed createInstance(CreateInstanceEventInterface $event)
创建新实例。
InstanceFactoryMethod
- mixed static create(CreateInstanceEventInterface $event)
创建新实例。
开发
静态分析
composer analyse
编码风格检查
composer check
编码风格修复
composer fix
测试
composer test
Git 预提交设置
ln -s ../../pre-commit .git/hooks/pre-commit
补充说明
请,如果您对这库感兴趣,请报告任何问题,并且不要犹豫贡献。我们将非常感谢对这库发展的任何贡献。