第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

小白,請教各位大佬!如何理解ThinkPHP框架里的依賴注入?

小白,請教各位大佬!如何理解ThinkPHP框架里的依賴注入?

明月笑刀無情 2019-10-19 09:07:51
今天突然又一次在控制器中看到下面這樣的代碼,laravel中也有.publicfunctiongetReqInfo(Request$request){代碼}先說自己目前的認(rèn)知和疑問:依賴輸入是一種設(shè)計模式,實質(zhì)是把一個類不可能更換的部分和可更換的部分分離開來,通過注入的方式來使用,從而達(dá)到解耦的目的.這不是有些類似trait嗎?不是相當(dāng)于在類A中使用類B里的方法嗎?有多種實現(xiàn)方式,最常見的先引入,實例化,再調(diào)用.通過依賴注入調(diào)用其他類以及類里的方法,和其它調(diào)用方式有什么區(qū)別呢?上述代碼里,方法后所傳入的參數(shù)Request,這個作用是類似強(qiáng)類型語言里的限定類型,表示限定在Request類下$request,表示限定在Request類下的$request對象?該怎么正確理解解依賴注入呢?有沒有什么通俗易懂的例子或者表述?
查看完整描述

2 回答

?
溫溫醬

TA貢獻(xiàn)1752條經(jīng)驗 獲得超4個贊

首先,你這個理解方式就不是很對。
依賴注入的主要目的就是代碼解耦,提高代碼的可用性,單一性,以及可測試性。
但是你提問中的栗子,還涉及到了有依賴注入衍生出的另一個知識「依賴注入容器」。
publicfunctiongetReqInfo(Request$request){
//TODO
}
在這里,因為你這個控制器實例是由容器來創(chuàng)建的,對應(yīng)的方法實現(xiàn)也是由依賴注入來進(jìn)行處理的,當(dāng)分析到getReqInfo這個方法時,第一個參數(shù)的參數(shù)類型是一個用戶參數(shù)類型,但是,在依賴注入容器中,這里并不限于類型這個可以是一個接口(Interface)。
在容器創(chuàng)建之初或者運行時,將接口對應(yīng)的實體類綁定(bind)到容器內(nèi)。
如果沒有這個當(dāng)使用容器處理這個方法時,會先在容器中尋找這個參數(shù)類型是否有對應(yīng)的綁定,如果有就調(diào)用綁定的實體,如果沒有,就判斷其是否是一個可以實例化的類,并處理將其作為參數(shù)注入。
在容器中,這一切都是由容器自己去完成的。
再說Trait,Trait的主要目的是用于代碼復(fù)用,和依賴注入的點并不一致,不知道你是怎么會像這樣想。
當(dāng)依賴注入單獨出現(xiàn)時,這個代碼可能并不是那么的優(yōu)雅,但是當(dāng)容器出現(xiàn)時,這一切就變了。
關(guān)于栗子,你可以看我的一篇文章,雖然寫的不是很好,興許能幫助你理解。
如何理解Laravel和ThinkPHP5中的服務(wù)容器與注入?-開發(fā)中的一些奇技淫巧-SegmentFault思否
                            
查看完整回答
反對 回復(fù) 2019-10-19
  • 2 回答
  • 0 關(guān)注
  • 375 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號