php依赖注入的原理-PHP问题

资源魔 36 0

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故障解决 php使用问题

抱歉,评论功能暂时关闭!