kanian / containerx
简单的PHP DI容器
1.5.1
2019-03-20 14:55 UTC
This package is auto-updated.
Last update: 2024-09-21 21:14:32 UTC
README
ContainerX是一个小巧的PHP依赖注入容器。
安装
$ composer require kanian/containerx
用法
设
Car 类是
class Car { protected $driver; public function __construct(Driver $driver) { $this -> driver = $driver; } \\\ ... more car code }
和 HumanDriver 类是
class HumanDriver implements Driver { public function drive() { \\\ ... some driving code } }
我们可以使用
容器功能作为对象方法
为了以对象方法的方式访问容器功能
use Kanian\ContainerX\Container; $container = new Container(); $container->set('chauffeur', function($c){ return new HumanDriver;}); $container->set('limo', function($c){ return new Car($c->get('chauffeur'));}); $limo = $container->get('limo');
我们已经使用匿名函数作为工厂。此外,我们可以简单地注册所需的依赖,并让容器实例化它们
use Kanian\ContainerX\Container; $container = new Container(); $container->set('chauffeur',HumanDriver::class); $container->set('limo',Car::class); $limo = $container->get('limo');
容器将知道如何为我们构建一个Car实例。
或者,我们可以使用
通过ArrayAccess接口使用容器功能
例如,我们可以通过使用实现了ArrayAccess接口的 Kanian\Container\ContainerX 类来实现基于工厂的注册。
use Kanian\ContainerX\ContainerX; $container = new ContainerX(); $container['chauffeur'] = HumanDriver::class; $container['limo'] = Car::class; $limo = $container['limo'];
将依赖项作为单例访问
为了确保系统在任何时候都只有一个依赖项的副本,您将使用
singletonize
方法,如下所示
$container->singletonize('limo', Car::class); $limo = $container['limo'];
现在您将始终得到同一个Car实例,但HumanDriver的实例却是不同的。