php解答:PHP控制反转与依赖注入的实现介绍

 所属分类:php教程

 浏览:114次-  评论: 0次-  更新时间:2022-09-26
描述:更多教程资料进入php教程获得。 本篇文章给大家带来了关于PHP的相关知识,IOC-Inversion of Control,即控制反转。它不是什么技术,而是...
更多教程资料进入php教程获得。

php零基础到就业直播视频课:进入学习
程序员必备接口测试调试工具:立即使用

(推荐教程:PHP视频教程)

控制反转

控制反转是一种思想,是一种设计模式,这种设计模式能够降低耦合性。

例如

<?php
class 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 的代码。

为了解决这个问题,我们可以用控制反转这种设计模式。

<?php
class 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控制反转与依赖注入的实现介绍的详细内容,更多请关注zzsucai.com其它相关文章!

 标签: php,
积分说明:注册即送10金币,每日签到可获得更多金币,成为VIP会员可免金币下载! 充值积分充值会员更多说明»

讨论这个素材(0)回答他人问题或分享使用心得奖励金币

〒_〒 居然一个评论都没有……

表情  文明上网,理性发言!