zean / sim-di
简单的依赖注入容器
v1.0
2017-07-25 02:09 UTC
Requires
- php: >= 7.0.0
- psr/container: 1.0.0
Requires (Dev)
- phpunit/phpunit: ^6.2
This package is not auto-updated.
Last update: 2024-09-15 02:57:41 UTC
README
一个简单的支持autowire功能的PHP依赖注入框架。
附上之前写的一篇文:[用PHP撸一个DI容器](http://www.jianshu.com/p/bcb8cb785ca3)
安装
composer require zean/sim-di
使用
-
不使用面向接口编程风格
假设有两个类Car和Driver,Driver依赖于Car
class Car { protected $name = '汽车'; public function getName() { return $this->name; } }
class Driver { protected $car; public function __construct(Car $car) { $this->car = $car; } public function drive() { return '驾驶' . $this->car->getName(); } }
当我们需要Driver实例时,这时候我们只需要让容器创建,容器会自动注入Car实例
$app = \SimDI\Container::getInstance(); $driver = $app->get(Driver::class); echo $driver->drive();
输出:驾驶汽车
- 使用面向接口编程风格
如果我们用面向接口的方式来,我稍微修改一下上面的代码:
abstract class Car { protected $name = '汽车'; public function getName() { return $this->name; } }
interface Driveable { public function run(); }
class Benz extends Car implements Driveable { protected $name = '奔驰'; public function run() { return $this->getName() . '启动了!'; } }
class Driver { protected $car; public function __construct(Driveable $car) { $this->car = $car; } public function drive() { return '驾驶' . $this->car->run(); } }
面向接口编程时需要有一个配置来指定interface和实现类的对应关系,如下:
$config = [ Driveable::class => Benz::class, ];
然后在创建容器的时候我们使用上述配置:
$app = \SimDI\Container::getInstance($config); $driver = $app->get(Driver::class); echo $driver->drive();
输出:驾驶奔驰启动了!