控制反转 (Inversion of Control 简写IOC)
控制反转和依赖注入的关系是什么?
控制反转(IOC)是一种思想,依赖注入(DI)是实施这种思想的方法
作用:为了以一个重要的面向对象编程的法则来削减计算机程序的耦合问题
控制反转一般分为
依赖注入(Dependency Injection 简写DI) 这个应用比较广泛
依赖查找(Dependency Lookup 检查DL)
应用程序依赖容器创建并注入它所需要的外部资源
依赖注入容器
追求解耦合的代码:
解耦合的代码更加易于扩展。我们能够在不改变大量对象的情况下增加功能。
我们能够将功能独立开来,以便编写简短的,易于阅读的单元测试。
我们也获得了易于维护的代码。当程序出错的时候,我们能够更加容易发现我们需要修改哪部分内容。
我们在团队协作开发的过程中,比如提交合并代码,通常不希望也应该避免团队成员之间的代码存在冲突,而解耦合有利于团队成员各自维护自己的代码片段而互相不受影响。
解耦合可以使延迟绑定变得更加容易。延迟绑定,或者运行时绑定,是我们在运行时做决定而不是编译时,这在特定场合下很有用。
依赖注入的三种方案
第一种方案:
直接在类里面进行 new 创建另一个类
class A { pulic function test() { $this->b = new B; } }
第二种方案
类的方法里以参数的形式的进行传入
class A { public function __construct(B $b) { $this->b = $b; } }
第三种方案
使用set 方法进行传入
class A { public function setB(B $b) { $this->b = $b; } }
以上三种都不是最优方法,只是能够实现依赖注入,最优的方法是,中间创建一个容器,存在各种第三方依赖类,
这个类可以进行 存放、创建、获取、查找需要的依赖关系
所以针对以上的各个方案,专门创建一个中间容器,帮助我们管理这些依赖关系
class Ioc { protected $b; public static function makeB() { $this->b = new B; return $this->b; } }