## 简介    关于依赖注入与反射的知识大家可以百度,不过学习难度不小,DTapi是面向php新手小白的,所以这里也就不详究其原理了,大家只要知道怎么用就行了。    了解面向对像编程的php小伙伴肯定应该知道,要使用一个class就必须先用include或require将文件导入进来,然后再new对像。    稍微有点框架知识的小伙伴应该知道,include、require可以使用php的自动加载省略掉。    但是还有一个文件就是在A类中使用B类的方法,必须先要在加载A类之前new出B类,然后通过方法传参传进A类,或者global B对像,这样才能在A的方法中使用B的方法。    还有就是直接在A的方法new 出B,这样看起来还是有点烦锁,有了依赖注入和反射后就不用再new来new去了,直接将对像传给A中的方法即可。 老方式: ``` <?php namespace dtapi; use dtapi\B; class A { function ceshi(){ $do = new B(); } function test(){ $do = new B(); } } ?> ``` 上面的方法我们是建立在自动加载的基础上,A中每个方法要使用B 都得new一遍,是不是麻烦。 当然我们可以在构造方法中全局new 好: ``` <?php namespace dtapi; use dtapi\B; class A { private $B; function __construct() { $this->B = new B(); } function ceshi(){ $this->B->dao(); } function test(){ $this->B->sao(); } } ?> ``` 这样就不用每个方法里都去new了,但是如果A还有第三个方法user不需要用到B,而user控制器也不需要用到A中的其它方法,这时候如果采用上面的方法在user控制器中也会加载B 类,影响性能,虽然可以忽略不计,但是能有更好的办法避免那肯定是最好的。 那么有了依赖注入和反射后这问题就迎刃而解了。下面请看: ``` <?php namespace dtapi; use dtapi\B; class A { function ceshi(B $do){ $do->sao(); } function test(B $do){ $do->dao(); } function user(){ echo 'dtapi.com'; } } ?> ``` 首先一看,代码都少了吧,用起来也更简单了吧。在使用user方法时也不会再加载B类进来了。 ## 注意 依赖注入和反射的作用当然不是为了我上面说的情况而诞生的,而是大项目的中对像之间的松耦合,可复用,维护方便而生的。但是DTapi只是开发小插件,根本不涉及到这一块,而这一块也太深入,对于PHP小白来说也太难了。所以我们就当是为了减少写代码而服务的。 ##一个方法中注入多个类 ``` <?php namespace dtapi; use dtapi\B; user dtapi\C; user dtapi\D; class A { function ceshi(B $b,C $c,D $d){ $b->dao(); $c->ask(); $d->chifan(); } } ?> ``` 一个方法中注入多个对像,只需要用逗号隔开就行了,就和函数传一样的。 # 打赏 您的支持是我最大的动力哦,立即通过微信扫一扫犒劳下高飞吧! ![](images/weixin.jpg)