依赖注入(初步理解)

发布时间:2020-09-12 00:00:00 阅读:(334)

    什么是依赖注入

    借鉴于:文章地址
    把有依赖关系的类放进容器中,解析出这些类的实例,就是依赖注入。目的是实现类的解耦

    实例:Class A中用到了Class B的对象 bObject,普通情况下,需要在类A的代码中显示的new出一个B的对象。采用依赖注入后,A的代码只需要定义一个私有的B对象,不需要直接new 来获取这个对象,而是通过相关容器控制程序来将B的对象在外部new出来并注入到A类的引用中。
    示例代码:

    <?php
    
    class A{
        protected $info;
        // $b 为实例化的b
        public function __construct($b){
            $this->info = $b;
        }
        public function a(){
            // 直接调用b中的方法
            return $this->info->b();
        }
    }
    
    class B{
        public function __construct(){
        }
        public function b(){
            return 'class b function b';
        }
    }
    $b = new B();
    $a = new A($b);
    $c = $a->a();
    var_dump($c);
    

    以上就是个简单的依赖注入,但有可能类B中b方法改名为c了,那类A中调用a方法时触发的b方法同样要修改为c,还是进入了上面的怪圈中,稍有变动就要改动很多有关联的内容

    • 接口类:
    1. 接口的特点:
    2. 接口的方法必须公开
    3. 接口的方法默认是抽象的,故不需要在方法名前加abstract
    4. 接口可以定义常量,但不能有成员属性,常量定义和用法和类中常量一样
    5. 类可以实现多个接口
    6. 接口也可继承接口

    实例代码:

    <?php
    
    class A{
        protected $info;
        // $b 为实例化的b
        public function __construct($b){
            $this->info = $b;
        }
        public function a(){
            // 直接调用b中的方法
            return $this->info->b();
        }
    }
    // 接口类
    interface B{
        // 抽象方法,没有具体逻辑
        public function b();
    }
    class C implements B{
        public function b(){
            return 'class c function B';
        }
    }
    
    class D implements B{
        public function b(){
            return 'class d function b';
        }
    }
    $c = new C();
    $a = new A($c);
    $c = $A->a();
    var_dump($c);
    

    在此代码中,实例化A时,不管传入C的实例或者D的实例都不影响类A中的a方法调用注入对象的b方法(此方法的方法名在抽象类中定义)