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依赖注入的原理的具体内容,更多请存眷资源魔其它相干文章!
抱歉,评论功能暂时关闭!