• 技术文章 >后端开发 >PHP问题

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

    WBOYWBOY2022-09-13 19:46:52转载195

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

    声明:本文转载于:脚本之家,如有侵犯,请联系admin@php.cn删除
    专题推荐:php
    上一篇:php怎么判断数组所有值是否都不为空 下一篇:php一维数组怎么升序排序(不去重)
    VIP课程(WEB全栈开发)

    相关文章推荐

    • ❤️‍🔥共22门课程,总价3725元,会员免费学• PHP中常用的魔术方法(总结分享)• php二维数组怎么求积• php遍历一个数组的三种方法是什么• php怎么去掉数组的第一个值• 为什么培训机构都不培训php了
    1/1

    PHP中文网