两张图让你理解 IoC (控制反转)

简单理解依赖注入(DI,Dependency injection)

依赖注入通过构造注入,函数调用或者属性的设置来提供组件的依赖关系。就是这么简单。

简单理解控制反转(IOC,(Inversion of Control)

file

一开始我们代码依赖关系可能是如图这样的,这里只举例了3个对象和三个类的交叉依赖,我们代码的依赖关系实际情况其实要复杂得多,脑补十多个对象的交叉,甚至还有横向交叉。

现在问题来了,由于不可抗拒的原因,PHP版本升级,需求更改等等,要把α对象替换掉,把β对象删掉,请问我们要改多少处代码??

是时候拿出IOC了。

file

瞬间清爽。

IOC容器在全局维持一个对象实例集合和类名集合,我们在写某个类的时候把这个类依赖的对象注册到容器里,调用这个类的时候再实例化拿出来。

这个就是IOC的思想,一个系统通过组织控制和对象的完全分离来实现”控制反转”。对于依赖注入,这就意味着通过在系统的其他地方控制和实例化依赖对象,从而实现了解耦。

拓展阅读:

PHP之道-依赖注入和IOC

PHP程序员如何理解IOC

理解Laravel的IOC

本帖已被设为精华帖!
本帖由 Summer 于 7年前 加精
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 13
Summer

point 很清晰

7年前 评论

赞一个,解释的很清晰,很容易理解

7年前 评论
lijinma

学习了,哈哈

7年前 评论

@Summer 有个小建议,看能不能把markdown的标题都提取出来自动生成文章目录,放在页面右侧,下拉页面可以自动悬浮。现在的系统把正文的描点都加了,不利用起来可惜。

7年前 评论

图片挂了,能否麻烦修复一下

6年前 评论
nickfan

楼主的ssl证书有问题,图片被阻止了。

6年前 评论

有没有代码层面的示例 :joy:

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!