您好,欢迎访问一九零五行业门户网

控制反转 php(在spring框架中,什么是控制反转,什么是依赖注入)

本文主要介绍控制反转php(在spring框架中 什么是控制反转 什么是依赖注入),下面一起看看控制反转php(在spring框架中 什么是控制反转 什么是依赖注入)相关资讯。
先看一个例子:
?phpclass a { public $ b;公共$ c;公共函数a{//todo }公共函数方法{ $ this-b = new b;$ this-c = new c;$ this-b-method;$ this-c-method;//todo } } class b { public function b{//todo } public function method{//todo echo ;b ;} }类{公共函数c{//todo }公共函数方法{//todo echo ;c ;} } $ a = new a;$ a-method;?上面的代码,我们可以很容易理解一句话:
a类依赖于b类和c类。
也就是说,在以后的开发过程中,如果我们要修改b类或者c类,一旦函数被重命名,函数参数个数发生变化,甚至整个类结构的调整,我们就要对a类进行相应的调整,a类的独立性就丧失了,这在开发过程中是非常不方便的,也就是我们所说的 牵一发而动全身。如果两个班分别由两个人写,这时候往往会产生矛盾。。。
万一真的要改b类和c类,有什么办法可以不改或者尽量少改a类的代码?这里使用了控制反转。
高层模块不要依赖底层模块,两者都要依赖抽象。
控制反转(ioc)是一种思想,依赖注入(di)是实现这种思想的。
第一种方法叫做构造函数注入(这种方法也不推荐,但总比没有强)。
a类{公共$ b;公共$ c;公共函数a($b,$ c){ $ this-b = $ b;$ this-c = $ c;}公共函数方法{ $ this-b-method;$ this-c-method;}}客户端类写道:
$ a =新a(新b、新c);$ a-method;a类的构造函数依赖于b类和c类,通过传入构造函数的参数,至少达到了一个目的,就是b类对象和c类对象的创建都被移到了a类之外,所以一旦b类和c类发生变化,a类不需要修改,只需要在class client里面修改就可以了。
如果有一天,我们需要扩展b类。做b类的两个子类。
class b { public function b{//todo }公共函数方法{//todo echo ;b ;} }类扩展b { public function b1{//todo } public function method{ echo ;b1 ;} }类b2扩展b {公共函数b2{//todo }公共函数方法{ echo b2 ;}}也很简单,所以client类写:
$ a =新a(新b2、新c);$ a-method;因此,a类不 不必关心b类有什么子类,只需要关心它们在client类中。
第二种方法称为工厂模式注入(推荐)
类工厂{公共函数工厂{//todo }公共函数创建($ s){开关($ s){ case ;b ;: { return new b;打破;}案例 c : { return new c;打破;} default : { return null;打破;}}}}我们的a类代码改为:
a类{公共$ b;公共$ c;公共函数a{//todo }公共函数方法{ $ f = new factory;$ this-b = $ f-create( ;b ;);$ this-c = $ f-create( ;c );$ this-b-method;$ this-c-method;//todo}}实际上已经解耦了一小部分。至少如果b类和c类的构造函数发生变化,比如修改函数参数,我们只需要改变工厂类。
抽象不要依赖细节,细节要依赖抽象。
抽象出b类和c类中的方法,做一个接口。
接口方法{公共函数方法;}这样,a类中的$b变量和$c变量就不再是具体变量,而是抽象变量。直到奔跑的那一刻,我才明白。;我不知道他们的方法是如何实现的。
class b实现i method { public function b{//todo } public function method{//todo echo ;b ;} }类实现i method { public function c{//todo } public function method{//todo echo ;c ;}}总结几点:
1.我们将类a中的类b对象和类c对象的创建移到了类a之外。
2.原来a类依赖b类和c类,现在变成了依赖工厂,工厂依赖b和c。
标签:
依赖方法抽象
了解更多控制反转php(在spring框架中 什么是控制反转 什么是依赖注入)相关内容请关注本站点。
其它类似信息

推荐信息