提供Discuz ,ECShop ,PHPCMS ,帝国CMS ,CSS教程 ,PHP教程 ,DedeCMS ,WordPress ,HTML教程等cms问题查询.
当前位置: PHP问题 > php依靠注入的道理【php问题】,php

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相干学问,请接见ki4网!

以上就是php依靠注入的道理的细致内容,更多请关注ki4网别的相干文章!

「梦想一旦被付诸行动,就会变得神圣,如果觉得我的文章对您有用,请帮助本站成长」

分享到:
赞(0) 打赏

支付宝扫一扫打赏

微信扫一扫打赏

标签:

上一篇:

下一篇:

相关推荐

0 条评论关于"php依靠注入的道理【php问题】,php"

最新评论

    暂无留言哦~~

博客简介

看古风美女插画Cos小姐姐,素材合集图集打包下载:炫龙网,好看二次元插画应有尽有,唯美小姐姐等你来。

友情链接

他们同样是一群网虫,却不是每天泡在网上游走在淘宝和网游之间、刷着本来就快要透支的信用卡。他们或许没有踏出国门一步,但同学却不局限在一国一校,而是遍及全球!申请交换友链

服务热线:
 

 QQ在线交流

 旺旺在线