mkgor / simple-di
PHP 上的简单依赖注入容器实现
dev-master
2020-06-04 09:14 UTC
This package is auto-updated.
Last update: 2024-09-04 18:21:36 UTC
README
SimpleDI 是一个轻量级、易于使用的 PHP 依赖注入容器。
安装
您可以通过 composer 安装 SimpleDI
composer require mkgor/simple-di
这就完成了!您现在就可以使用它了,因为它只需要一点配置就能提供 DIC 的基本功能
如何使用它?
只需调用 $container->get()
方法,它将解析指定类的所有依赖并返回给您!
SomeDependency.php
<?php class SomeDependency { public $anotherDependency; public function __construct(AnotherDependency $b) { $this->anotherDependency = $b; } }
AnotherDependency.php
<?php class AnotherDependency { public function sayHello() { echo "Hello from AnotherDependency"; } }
test.php
<?php require "vendor/autoload.php"; $container = new \SimpleDI\Container(__DIR__ . '/config.php'); //Output: Hello from AnotherDependency $container->get(SomeDependency::class)->anotherDependency->sayHello();
config.php
<?php return [ 'singleton' => [], 'definition' => [], ];
通过别名获取类
您可以为某个类指定别名,然后使用 SimpleDI 通过该别名调用它
<?php return [ 'singleton' => [], 'definition' => [ 'aliasName' => [ 'classname' => SomeClass::class, 'arguments' => [] ] ], ];
<?php require "vendor/autoload.php"; $container = new \SimpleDI\Container(__DIR__ . '/config.php'); /** @var SomeClass $someClass */ $someClass = $container->get('aliasName');
声明单例
如果您有一些在请求生命周期内只创建一次的类,您可以在配置中将其声明为单例。SimpleDI 将一次性创建其实例并将其保存到单例容器中
<?php return [ 'singleton' => [ 'aliasForSingleton' => [ 'classname' => SomeSingleton::class, 'arguments' => [] ] ], 'definition' => [] ];
<?php require "vendor/autoload.php"; $container = new \SimpleDI\Container(__DIR__ . '/config.php'); /** @var SomeSingleton $someClass */ $someClass = $container->get('aliasForSingleton'); $someClass->a = 4; // Output: 4 echo $someClass->a; $someClass2 = $container->get('aliasForSingleton'); // Output: 4 echo $someClass2->a;