1,当前只有一个依赖
class User{ public function __construct(qq $qq){ // 依赖注入 qq, 由外部实例化后注入 $this->qq = $qq; } } $qq = new qq(); // 依赖注入 qq $user = new User($qq);
2,新增几个依赖
class User{ public function __construct(qq $qq, weibo $weibo, weixin $weixin){ // 依赖注入 qq, weibo, weixin, 由外部实例化后注入 $this->qq = $qq; $this->weibo = $weibo; $this->weixin = $weixin; } } $qq = new qq(); // 新增依赖注入 qq $weibo = new weibo(); // 新增依赖注入 weibo $weixin = new weixin(); // 新增依赖注入 weixin $user = new User($qq, $weibo, $weixin);
3,发现新增依赖的时候,需要修改应用类的构造方法,怎么办呢?通过容器来管理依赖注入就可以解决了
class User{ protected $container; public function __construct(container $container){ // 依赖注入 container, 里面包含了所有依赖 $this->container = $container; } public function index(){ $qq = $this->container->get('qq'); $weibo = $this->container->get('weibo'); $weixin = $this->container->get('weixin'); } } $container = new container(); // 依赖注入的容器 $container->set('qq',function(){ return new qq(); // 新增依赖注入 qq }); $container->set('weibo',function(){ return new weibo(); // 新增依赖注入 weibo }); $container->set('weixin',function(){ return new weixin(); // 新增依赖注入 weixin }); $user = new User($container);
通过容器管理依赖注入,所有依赖注册到容器中,应用类只需从容器中获取依赖;
当新增依赖时,只需注册到容器中,不用改动应用类的代码
Leave a Reply