本文主要介绍控制反转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框架中 什么是控制反转 什么是依赖注入)相关内容请关注本站点。
电脑硬盘序列号地址怎么查,怎样查找电脑上的硬盘序列号
mac如何分区安装win10(苹果电脑装苹果系统怎么分区)
戴尔中国百度百科,DELL是什么牌子的电脑
手机支付宝免费下载安装包(下载手机支付宝软件)
电脑更换硬盘后需要重新做系统么,换新硬盘需要重装系统吗
控制反转 php(在spring框架中,什么是控制反转,什么是依赖注入)
win10电脑如何开启灰白模式快捷键(win10电脑如何开启灰白模式)
小米手机字体下载后怎么安装(小米手机字体如何免费下载)
如果忘记了锁屏密码怎么办,oppo如果忘记了锁屏密码怎么办
苹果ipad充不上电是什么原因(ipad没电了充了很久也不开机)
哪个w10好用(好用的win10)
win7清理c盘的操作步骤(windows7如何清理c盘)
监控的硬盘容易坏吗,做监控很坏硬盘吗我1T的硬盘还没一年就感觉有问题了磁盘操作
2021主机配置清单及价格(配电脑主机清单2020)
电脑一键启动设置(电脑一键启动按什么键)
三星手机怎么添加截屏,三星折叠屏手机怎么截屏
pr导入mp4视频没有声音怎么回事(pr导入mp4视频没有声音了)
电脑玩游戏卡解决办法(电脑玩游戏卡怎么回事-)
怎样把电脑磁盘分区合并,硬盘分区后怎么合在一起
地下城电脑版下载(世界地下城下载)