控制反转( IoC)和依赖注入(DI)

控制反转IoC)和依赖注入DI

tags: 容器 依赖注入 IOC DI 控制反转

引言:如果你看过一些框架的源码或者手册,像是laravel或者tp5之类的,应该会提到容器,依赖注入,控制反转等词汇。或者是某些面试官会问到这类问题。希望这篇文章能让你有所收获。

1.1、IoC(控制反转 Inversion of Control)

简述:控制反转并不是一种技术,而是一种设计思想。通过控制反转容器(以后称容器),改变了原本某些对象运行时依赖其他对象资源时需要自己进行获取(比如通过new ClassName),所造成的对象之间的强耦合(耦合的概念如果不理解,可以先去了解一下。)。

  所谓IoC,对于程序来说,就是构造了一个容器,比如在tp5中,这个容器叫Container,此容器来负责控制对象和对象间的关系。在一个对象中,如果要使用另外的对象,就必须得到它(自己new一个),这样的话一个对象A和另一个对象B之间就有了很强的联系(也就是强耦合)。这种耦合体现在如果被依赖的资源类初始化的时候(也可能是其他时候)传入的参数变化了,你要修改两个类的代码,举例说明:
  
你本来用的是php本身的session机制,现在想改成也支持redis,并在初始化的时候增加一个参数来控制。这个时候你不止需要去修改类Session类的代码,还要去修改类A的代码。部分代码如下

//原代码 class Session{ function __construct(){ //balabala } } class A{ protected $driver; function __construct(){ $this->driver = new Session(); } } //需要增加一种redis方式后修改为 class Session{ protected $driver; function __construct(string $driver=''){ if($driver === ''){ //balabala }else if($driver === 'redis'){//增加了一种模式 //balabala }else{ //balabala } } } class A{ protected $driver; function __construct(){ $this->driver = new Session('redis');//我想使用redis了 } }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpwpfg.html