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网别的相干文章!