php的依赖注入

什么是依赖注入?
依赖注入就是不是我自身的,却是我需要的,也是我所依赖的。

class Boy
{
	private $girl;
	
	public function __construct(Girl $girl)
	{
		$this->girl = $girl;
	}
}

class Girl{}

//这里的Boy类就强依赖Girl
$boy = new Boy(new Girl());

//为什么需要依赖注入?  请看没有依赖注入的原始代码:
class Boy
{
	private $girl;
	
	public function __construct()
	{
		$this->girl = new Girl();	
	}
}

$boy = new Boy();

//上面的方式把Girl这个类写死在了代码里,假如现在该男孩又喜欢另一个女孩了该怎么办呢?只有去修改代码,所有这里就体现了依赖注入的好处。我们可以在实例化boy时给它动态的选择女朋友。


//依赖注入的方式:
1:构造器注入:
class Book
{
	private $db;
	
	public function __construct($db)
	{
		$this->db = $db;
	}
}

2:setter注入:
class Book
{
	private $db;
	
	public function setDb($db)
	{
		$this->db = $db;
	}
	
	public function getDb()
	{
		return $this->db;
	}
}

那么这两种注入方法有什么缺点呢?
如果组件中有较多的依赖关系,我们需要创建多个setter方法传递对象或需要在构造器中传入多个对象参数,另外,每次使用组件时都需要创建依赖组件,这样就造成了代码维护不方便。

解决方法?
我们可以提供一个容器,把需要注入的对象都放进这个容器里,用的时候直接从容器中去取即可,其实它就是注册树模式。

总结:
因为大多数应用程序都是由两个或者更多的类通过彼此合作来实现业务逻辑,这使得每个对象都需要获取与其合作的对象(它所依赖的对象)的引用。如果这个获取过程要靠自身实现,那么将导致代码高度耦合并且难以维护和调试。

所以,才有了依赖注入的概念,依赖注入主要解决以下问题:
1:依赖类之间的解耦。
2:单元测试,方便Mock。

上面的代码很清晰,但当我们需要注入很多个依赖时,意味着又要增加很多行,会比较难以管理。比较好的解决办法是建立一个class作为所有依赖关系的容器,在这个class中可以存放、创建、获取、查找需要的依赖关系。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值