您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

PHP控制反转与依赖注入的实现介绍

2024/4/29 11:54:52发布27次查看
本篇文章给大家带来了关于php的相关知识,ioc-inversion of control,即控制反转。它不是什么技术,而是一种设计思想。下面介绍了php控制反转与依赖注入的实现,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望对大家有帮助。
(推荐教程:php视频教程)
控制反转控制反转是一种思想,是一种设计模式,这种设计模式能够降低耦合性。
例如
<?phpclass a{ public function getclassname(){ echo '我是class a'; }}class b{ public $test; public function __construct() { $this->test = new a(); //在类的内部获取依赖的对象。 //把依赖的对象写死在 class b 中,由 class b 选择依赖的对象,这叫做控制正转。 }}$b = new b();$b->test->getclassname();
//输出 我是class a
class b 的构造方法依赖 class a,如果把依赖的类( class a )写死在 class b 的构造方法中,这种写法耦合性非常高,
比如
如果 class a 改名了,我们还要修改 class b 的代码。
如果class b 不需要 class a 需要 class c ,我们还要修改 class b 的代码。
为了解决这个问题,我们可以用控制反转这种设计模式。
<?phpclass a{ public function getclassname(){ echo '我是class a'; }}class b{ public $test; public function __construct($obj) { $this->test = $obj; //不在类的内部写死依赖的对象,而是通过外部以参数的形式传入依赖的对象,这叫控制反转。 }}$b = new b (new a()); //注入 class a 的实例$b->test->getclassname();
//输出 我是class a
这样修改代码后,上面的两个问题也得到更好的解决。
如果 class a 改名了,我们不需要修改 class b 的代码,只需要修改传入 class b 构造方法的参数。
如果class b 不需要 class a 需要 class c ,我们不需要修改 class b 的代码,只需要修改传入 class b 构造方法的参数。
不把依赖的类( class a )写死在 class b 的构造方法中,而是在实例化 class b 时把依赖的类(class a)以参数的形式从外部传入 class b 的构造方法中,这样在我们不需要 class a 的时候只需修改传入 class b 的构造方法的参数即可,无需修改 class b 的代码,这样就大大降低耦合性了。
其实讲人话就一句话,不要在方法中实例化类,而是通过向方法传参的方式把对象传进方法中。
至此,class b 从之前的主动选择依赖转变为被动从外部接收依赖,依赖对象的获取方式被反转,这就是控制反转。
依赖注入依赖注入就把当前方法需要(依赖)的对象以传参的方式传(注)入到当前方法中。
依赖注入在上面的代码已经出现过了
$b = new b (new a()); // class b 的构造方法需要一个对象//注入 class a 的实例
控制反转与依赖注入的关系可以用一句话来总结,可以用依赖注入实现控制反转。
(推荐教程:php视频教程)
以上就是php控制反转与依赖注入的实现介绍的详细内容。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product