作家
登录

【服务器】PHP如何实现依赖注入?

作者: 来源: 2018-03-12 10:54:49 阅读 我要评论

沙龙晃荡 | 3月31日 京东、微博拭魅战专家与你合营商量容器技巧实践!


依附注入(Dependency Injection,简称DI)又称控制反转(Inversion of Control,简称IOC),在今朝的主流框架中,如ThinkPHP、Laravel等,都有实现。

什么是依附注入呢?

举个简单的例子:

(2)进入工业社会,工厂出现。斧子不再由通俗人完成,而在工厂里被临盆出来,此时须要斧子的人(调用者)找到工厂,购买斧子,无须关怀斧子的制造过程。

(1)原始社会里,几乎没有社会分工。须要斧子的人(调用者)只能本身去磨一把斧子(被调用者)。

(3)进入“按需分派”社会,须要斧子的人不须要找到工厂,坐在家里发出一个简单指令:须要斧子。斧子就天然涌如今他面前。

第一种情况下,实例的调用者创建被调用的实例,必定请求被调用的类涌如今调用者的代率攀里。无法实现二者之间的松耦合。

第二种情况下,调用者无须关怀被调用者具体实现过程,只须要找到相符某种标准(接口)的实例,即可应用。此时调用的代码面向接口编程,可以让调用者和被调用者解耦,这也是工厂模式大年夜量应用的原因。但调用者须要本身定位工厂,调用者与特定工厂耦合在一路。

依附注入在如今的编程中,有着比较凸起的优势,这也是ThinkPHP、Laravel等框架,应用此编程思惟的原因。那么这些框架到底是若何应用PHP去实现的呢?

第三种情况下,调用者无须本身定位工厂,法度榜样运行到须要被调用者时,依附注入容器主动供给被调用者实例。事实上,调用者和被调用者都处于依附注入容器的治理下,二者之间的依附关系由依附注入容器供给。是声调用者与被调用者的耦合度进一步降低,这使得应用加倍轻易保护,这就是依附注入所要达到的目标。

在PHP中若何实现依附注入呢?

下面我们应用一个简单的案例,来说说个中的奥秘。

起首我们创建一个类,看起来是如许的,包含一个属性和两个方:

假设我们如今有别的两个类,redisDB和cache,redisDB供给一个redis数据库的操作,cache负责缓存功能的实现并且依附于redisDB。如下:

在膳绫擎这个类中我们简单实现了redis的萌芽、保存和删除。另一个类和当前这个类构造很像:

如今我们就当已经实现了redisDB和cache这两个组件,具体的细节这里就先不做评论辩论了,来看看若何应用应用吧。起首须要将两个组件注入到容器中:

到这里你可能会认为如许以来反而有点繁琐了。cache和redisDB的构造如斯之像,完全可以把redis写到cache中而没须要零丁分别出来?然则你想过没有,有些数据及时性没那么高并且数量比较大年夜,用redis有点不合适,mongodb是更好的选择;有些数据更新频率更慢,对萌芽速度也没请求,直接写入文件保存到硬盘可能更为合适;再或者,你的客户认为redis运维难度有点大年夜,让你给他换成memcache... 这就是为什么把它分别出来了。然后,持续改绝代码:

我们新增长了一个接口BackendInterface,规定了redisDB,mongoDB,file这三个类必须实现这个接口所请求的功能,至于其他锦上添花的功能,随你怎么发挥。而cache的代码,似乎没有变,因为cache不须要关怀数据是怎么存入数据库或者文件中。而cache的调用者,也不须要关怀cache具体是怎么实现的,只要根据接话柄现响应的办法就行了。多人协作你会加倍受益,你们只须要商定好接口,然后分别实现就行了。


  推荐阅读

  如何给 “rm” 命令添加个“垃圾桶”

沙龙晃荡 | 3月31日 京东、微博拭魅战专家与你合营商量容器技巧实践! 仁攀类犯缺点是因为我们不是一个可编程设备,所以,在应用 rm 敕令时要额外留意,不要在任何时刻应用 rm -rf *。当你>>>详细阅读


本文标题:【服务器】PHP如何实现依赖注入?

地址:http://www.17bianji.com/lsqh/40589.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)