当前位置: 首页 > 后端技术 > PHP

PHP依赖注入(完整代码)

时间:2023-03-29 21:50:43 PHP

依赖注入的传统思想当一个应用程序使用了一个Foo类时,它会创建Foo类并调用Foo类的方法。如果在这个方法中需要一个Bar类,就会创建Bar类,调用Bar类的方法。而这个方法需要一个Bim类,它会创建Bim类,然后做其他的工作。/***Foo*/classFoo{publicfunctiondoSomething($value=''){#code...$Bar=newBar();$Bar->doSomething();echo'FoodoSomething','
';}}/***Bar*/classBar{publicfunctiondoSomething($value=''){#code...$Bim=newBim();$Bim->doSomething();echo'BardoSomething','
';}}/***Bim*/classBim{publicfunctiondoSomething($value=''){#code...echo'BimdoSomething','
';}}$doSomething=newFoo();$doSomething->doSomething();依赖注入应用使用Foo类,Foo类需要Bar类,Bar类需要Bim类,然后先创建Bim类,然后创建Bar类并注入Bim,再创建Foo类,注入Bar类,然后调用Foo方法,Foo调用Bar方法,然后做其他工作。/***Bim2*/classBim2{publicfunctiondoSomething($value=''){#code...echo'Bim2doSomething','
';}}/***Bar2*/classBar2{private$bim2;公共函数__construct(Bim2$bim2){#代码...$this->bim2=$bim2;}publicfunctiondoSomething($value=''){#代码...$this->bim2->doSomething();echo"Bar2doSomething",'
';}}/***Foo*/classFoo2{private$bar2;publicfunction__construct(Bar2$bar2){#代码...$this->bar2=$bar2;}publicfunctiondoSomething($value=''){#代码...$this->bar2->doSomething();echo"Foo2doSomething",'
';$doSomething2=newFoo2(newBar2(newBim2()));$doSomething2->doSomething();这就是控制模式的反转。依赖关系的控制反转进入调用链的开始。这样你就可以完全控制依赖关系,通过调整不同的注入对象来控制程序的行为。比如Foo类使用了memcache,不用修改Foo类的代码就可以改用redis。使用依赖注入容器后的思路是应用需要获取Foo类,所以从容器中获取Foo类,容器创建Bim类,然后创建Bar类并注入Bim,然后创建Foo类,并注入Bar,应用程序调用Foo方法,Foo调用Bar方法,然后做其他工作。扩展:容器负责实例化、依赖注入和依赖处理。