php--->依赖注入(DI)实现控制反转(IOC)

依赖注入(DI)实现控制反转(IOC)

DI和IOC概念理解
  • 当一个类的实例需要另一个类的实例协助时,在传统的程序设计过程中,通常由调用者来创建被调用者的实例。而采用依赖注入的方式,创建被调用者的工作不再由调用者来完成,因此叫控制反转,创建被调用者的实例的工作由IOC容器来完成,然后注入调用者,因此也称为依赖注入。
  • 所以DI和IOC的关系就是IOC是一种思想,而DI是实现这种的思想的方法
  • 完成依赖注入需要三方参与:一个是某个对象;一个是IoC/DI的容器;另一个是某个对象的外部资源。 某个对象指的就是任意的、普通的PHP对象; IoC/DI的容器简单点说就是指用来实现IoC/DI功能的一个框架程序; 对象的外部资源指的就是对象需要的,但是是从对象外部获取的,都统称资源,比如:对象需要的其它对象、或者是对象需要的文件资源等等
  • 常规情况下的应用程序,如果要在A里面使用C,你会怎么做呢?当然是直接去创建C的对象,也就是说,是在A类中主动去获取所需要的外部资源C($c = new C();),这种情况被称为正向的。那么什么是反向呢?就是A类不再主动去获取C,而是被动等待,等待IoC/DI的容器获取一个C的实例,然后反向的注入到A类中,A类才能去调用。
依赖注入的实现方式
  • 构造函数注入
  • setter方法注入
  • 据经验,一般通过构造函数注入的是强依赖关系的组件,setter方式用来注入可选的依赖组件。
  • 还有较多其它方式比如:属性方式注入,回调注入,普通方法注入等等
实现

个人实现的小案例源码:https://github.com/Frankltf/DI

参考:https://segmentfault.com/a/1190000002424023

posted @ 2018-04-26 11:44  技术-刘腾飞  阅读(225)  评论(0编辑  收藏  举报