• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    PHP依赖注入原理与用法分析

    本文实例讲述了PHP依赖注入原理与用法。分享给大家供大家参考,具体如下:

    引言

    依然是来自到喜啦的一道面试题,你知道什么是依赖注入吗?

    依赖注入(DI)的概念虽然听起来很深奥,但是如果你用过一些新兴的php框架的话,对于DI一定不陌生,因为它们多多少少都用到了依赖注入来处理类与类之间的依赖关系。

    php中传递依赖关系的三种方案

    其实要理解DI,首先要明白在php中如何传递依赖关系。

    第一种方案,也是最不可取的方案,就是在A类中直接用new关键词来创建一个B类,如下代码所示:

    ?php
    class A
    {
      public function __construct()
      {
        $b = new B();
      }
    }
    
    

    为什么这种方案不可取呢?因为这样的话,A与B就耦合在了一起,也就是说A类无法脱离B类工作。

    第二种方案就是在A类的方法中传入需要的B类,如下代码所示:

    ?php
    class A
    {
      public function __construct(B $b)
      {
      }
    }
    
    

    这种方法比第一种方案有了改进,A类不必与B类捆绑在一起,只要传入的类满足A类的需求,也可以是C类,也可以是D类等等。

    但是这种方案的弊端在于如果A类依赖的类较多,参数列表会很长,容易发生混乱。

    第三种方案是使用set方法传入,如下代码所示:

    ?php
    class A
    {
      public function setB(B $b)
      {
        $this->b = $b;
      }
    }
    
    

    这种方案同样存在和第二种方案一样的弊端,当依赖的类增多时,我们需要些很多很多的set方法。

    这时我们在想如果有一个专门的类(或者说一个容器)可以帮我们管理这些依赖关系就好了。

    一个简单的依赖注入的例子

    如下代码来自twittee

    ?php
    class Container {
     private $s=array();
     function __set($k, $c) { $this->s[$k]=$c; }
     function __get($k) { return $this->s[$k]($this); }
    }
    
    

    有了container类之后我们可以怎样管理A与B之间的依赖关系呢,用代码说话吧:

    ?php
    class A
    {
      private $container;
      public function __construct(Container $container)
      {
        $this->container = $container;
      }
      public function doSomeThing()
      {
        //do something which needs class B
        $b = $this->container->getB();
        //to do
      }
    }
    
    

    再将B类注入到容器类中:

    $c = new Container();
    $c->setB(new B());
    
    

    还可以传入一个匿名函数,这样B类就不会在传入时就立即实例化,而是在真正调用时才完成实例化的工作:

    $c = new Container();
    $c->setB(function (){
      return new B();
    });
    
    

    这里举的只是一个很简单的例子,在实际中,容器类要考虑的有很多,比如延迟加载等等。

    更多关于PHP相关内容感兴趣的读者可查看本站专题:《php面向对象程序设计入门教程》、《PHP基本语法入门教程》、《PHP运算与运算符用法总结》、《PHP网络编程技巧总结》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

    希望本文所述对大家PHP程序设计有所帮助。

    您可能感兴趣的文章:
    • php+laravel依赖注入知识点总结
    • laravel框架中你所用到的依赖注入详解
    • 通过源码解析Laravel的依赖注入
    • Laravel实现构造函数自动依赖注入的方法
    • PHP依赖注入容器知识点浅析
    • php依赖注入知识点详解
    • php中的依赖注入实例详解
    • php反射学习之依赖注入示例
    • 详解Laravel框架的依赖注入功能
    上一篇:PHP 二维array转换json的实例讲解
    下一篇:CodeIgniter框架钩子机制实现方法【hooks类】
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯

    时间:9:00-21:00 (节假日不休)

    地址:江苏信息产业基地11号楼四层

    《增值电信业务经营许可证》 苏B2-20120278

    PHP依赖注入原理与用法分析 PHP,依赖,注入,原理,与,用法,