本文主要介紹控制反轉(zhuǎn)php(在spring框架中 什么是控制反轉(zhuǎn) 什么是依賴注入),下面一起看看控制反轉(zhuǎn)php(在spring框架中 什么是控制反轉(zhuǎn) 什么是依賴注入)相關(guān)資訊。
先看一個(gè)例子:
?phpclass a { public $ b;公共$ c;公共函數(shù)a{//todo }公共函數(shù)方法{ $ 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 ;} }類{公共函數(shù)c{//todo }公共函數(shù)方法{//todo echo ;c ;} } $ a = new a;$ a-method;?上面的代碼,我們可以很容易理解一句話:
a類依賴于b類和c類。
也就是說,在以后的開發(fā)過程中,如果我們要修改b類或者c類,一旦函數(shù)被重命名,函數(shù)參數(shù)個(gè)數(shù)發(fā)生變化,甚至整個(gè)類結(jié)構(gòu)的調(diào)整,我們就要對(duì)a類進(jìn)行相應(yīng)的調(diào)整,a類的獨(dú)立性就喪失了,這在開發(fā)過程中是非常不方便的,也就是我們所說的 牽一發(fā)而動(dòng)全身。如果兩個(gè)班分別由兩個(gè)人寫,這時(shí)候往往會(huì)產(chǎn)生矛盾。。。
萬一真的要改b類和c類,有什么辦法可以不改或者盡量少改a類的代碼?這里使用了控制反轉(zhuǎn)。
高層模塊不要依賴底層模塊,兩者都要依賴抽象。
控制反轉(zhuǎn)(ioc)是一種思想,依賴注入(di)是實(shí)現(xiàn)這種思想的。
第一種方法叫做構(gòu)造函數(shù)注入(這種方法也不推薦,但總比沒有強(qiáng))。
a類{公共$ b;公共$ c;公共函數(shù)a($b,$ c){ $ this-b = $ b;$ this-c = $ c;}公共函數(shù)方法{ $ this-b-method;$ this-c-method;}}客戶端類寫道:
$ a =新a(新b、新c);$ a-method;a類的構(gòu)造函數(shù)依賴于b類和c類,通過傳入構(gòu)造函數(shù)的參數(shù),至少達(dá)到了一個(gè)目的,就是b類對(duì)象和c類對(duì)象的創(chuàng)建都被移到了a類之外,所以一旦b類和c類發(fā)生變化,a類不需要修改,只需要在class client里面修改就可以了。
如果有一天,我們需要擴(kuò)展b類。做b類的兩個(gè)子類。
class b { public function b{//todo }公共函數(shù)方法{//todo echo ;b ;} }類擴(kuò)展b { public function b1{//todo } public function method{ echo ;b1 ;} }類b2擴(kuò)展b {公共函數(shù)b2{//todo }公共函數(shù)方法{ echo b2 ;}}也很簡單,所以client類寫:
$ a =新a(新b2、新c);$ a-method;因此,a類不 不必關(guān)心b類有什么子類,只需要關(guān)心它們?cè)赾lient類中。
第二種方法稱為工廠模式注入(推薦)
類工廠{公共函數(shù)工廠{//todo }公共函數(shù)創(chuàng)建($ s){開關(guān)($ s){ case ;b ;: { return new b;打破;}案例 c : { return new c;打破;} default : { return null;打破;}}}}我們的a類代碼改為:
a類{公共$ b;公共$ c;公共函數(shù)a{//todo }公共函數(shù)方法{ $ f = new factory;$ this-b = $ f-create( ;b ;);$ this-c = $ f-create( ;c );$ this-b-method;$ this-c-method;//todo}}實(shí)際上已經(jīng)解耦了一小部分。至少如果b類和c類的構(gòu)造函數(shù)發(fā)生變化,比如修改函數(shù)參數(shù),我們只需要改變工廠類。
抽象不要依賴細(xì)節(jié),細(xì)節(jié)要依賴抽象。
抽象出b類和c類中的方法,做一個(gè)接口。
接口方法{公共函數(shù)方法;}這樣,a類中的$b變量和$c變量就不再是具體變量,而是抽象變量。直到奔跑的那一刻,我才明白。;我不知道他們的方法是如何實(shí)現(xiàn)的。
class b實(shí)現(xiàn)i method { public function b{//todo } public function method{//todo echo ;b ;} }類實(shí)現(xiàn)i method { public function c{//todo } public function method{//todo echo ;c ;}}總結(jié)幾點(diǎn):
1.我們將類a中的類b對(duì)象和類c對(duì)象的創(chuàng)建移到了類a之外。
2.原來a類依賴b類和c類,現(xiàn)在變成了依賴工廠,工廠依賴b和c。
標(biāo)簽:
依賴方法抽象
了解更多控制反轉(zhuǎn)php(在spring框架中 什么是控制反轉(zhuǎn) 什么是依賴注入)相關(guān)內(nèi)容請(qǐng)關(guān)注本站點(diǎn)。
電腦硬盤序列號(hào)地址怎么查,怎樣查找電腦上的硬盤序列號(hào)
mac如何分區(qū)安裝win10(蘋果電腦裝蘋果系統(tǒng)怎么分區(qū))
戴爾中國百度百科,DELL是什么牌子的電腦
手機(jī)支付寶免費(fèi)下載安裝包(下載手機(jī)支付寶軟件)
電腦更換硬盤后需要重新做系統(tǒng)么,換新硬盤需要重裝系統(tǒng)嗎
控制反轉(zhuǎn) php(在spring框架中,什么是控制反轉(zhuǎn),什么是依賴注入)
win10電腦如何開啟灰白模式快捷鍵(win10電腦如何開啟灰白模式)
小米手機(jī)字體下載后怎么安裝(小米手機(jī)字體如何免費(fèi)下載)
如果忘記了鎖屏密碼怎么辦,oppo如果忘記了鎖屏密碼怎么辦
蘋果ipad充不上電是什么原因(ipad沒電了充了很久也不開機(jī))
哪個(gè)w10好用(好用的win10)
win7清理c盤的操作步驟(windows7如何清理c盤)
監(jiān)控的硬盤容易壞嗎,做監(jiān)控很壞硬盤嗎我1T的硬盤還沒一年就感覺有問題了磁盤操作
2021主機(jī)配置清單及價(jià)格(配電腦主機(jī)清單2020)
電腦一鍵啟動(dòng)設(shè)置(電腦一鍵啟動(dòng)按什么鍵)
三星手機(jī)怎么添加截屏,三星折疊屏手機(jī)怎么截屏
pr導(dǎo)入mp4視頻沒有聲音怎么回事(pr導(dǎo)入mp4視頻沒有聲音了)
電腦玩游戲卡解決辦法(電腦玩游戲卡怎么回事-)
怎樣把電腦磁盤分區(qū)合并,硬盤分區(qū)后怎么合在一起
地下城電腦版下載(世界地下城下載)