zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    常用的电脑快捷键【转】
    win10关闭自动更新【转】
    JavaScript中双叹号(!!)作用【转】
    javascript中获取dom元素的高度和宽度【转】
    javascript的setTimeout()用法总结,js的setTimeout()方法【转】
    JavaScript sort() 方法使用【转】
    JavaScript slice() 方法使用【转】
    Ball CodeForces
    C. Trailing Loves (or L'oeufs?)
    C
  • 原文地址:https://www.cnblogs.com/frankltf/p/8950835.html
Copyright © 2011-2022 走看看