Laravel 學(xué)習(xí)筆記:深入理解控制反轉(zhuǎn)(IoC)和依賴注入(DI)

laravel.jpg

目的:解耦和減少依賴關(guān)系;

控制反轉(zhuǎn)(IoC):由外部負(fù)責(zé)其依賴行為;

例如“超人”類不需要在其內(nèi)部固化它的“超能力”,而是由外部來產(chǎn)生、組裝“超能力”,再通過“超人”的某個接口中植入;

只要“超能力”滿足某個接口,就能被超人所使用;

依賴注入(DI):對象的依賴,由外部以參數(shù)或其他的形式傳入;

例如“超人”的構(gòu)造器,接收一個實現(xiàn)了“超能力”接口的對象,這樣所有人都能給超人制造“超能力”,只要這個“超能力”遵循“超能力”接口;

其實,IoC 和 DI 講的差不多是同一個意思;

主角:IoC 容器;

IoC 和 DI 的概念都是為 IoC 容器做準(zhǔn)備,Laravel 的核心就是一個 IoC 容器;

IoC 容器是一個更為先進(jìn)的“工廠”,它可以根據(jù)預(yù)定的腳本,自動組裝類所需要的依賴;

基本原理:我們通過注冊、綁定的方式向容器中添加一段可以被執(zhí)行的回調(diào)(可以是匿名函數(shù)、非匿名函數(shù)、類的方法)作為生產(chǎn)一個類的實例的 腳本 ,只有在真正的 生產(chǎn)(make) 操作被調(diào)用執(zhí)行時,才會觸發(fā);

這樣一種方式,使得我們更容易在創(chuàng)建一個實例的同時解決其依賴關(guān)系,并且更加靈活。當(dāng)有新的需求,只需另外綁定一個“生產(chǎn)腳本”即可;

Laravel 的 IoC 容器更加高級,可以根據(jù)類的需求,自動注冊、綁定符合的依賴,并自動注入到構(gòu)造函數(shù)中去;

其原理也并不是很復(fù)雜,是使用了 PHP 的反射機(jī)制;

Laravel 服務(wù)容器實例教程 —— 深入理解控制反轉(zhuǎn)(IoC)和依賴注入(DI)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 容器,字面上理解就是裝東西的東西。常見的變量、對象屬性等都可以算是容器。一個容器能夠裝什么,全部取決于你對該容器的...
    拉風(fēng)的老衲閱讀 454評論 1 3
  • 先說幾句廢話,調(diào)和氣氛。事情的起由來自客戶需求頻繁變更,偉大的師傅決定橫刀立馬的改革使用新的框架(created ...
    wsdadan閱讀 3,203評論 0 12
  • 前段時間朋友圈被這句話刷了屏,竟然還有大神拿它來做簽名。阿夏當(dāng)時立馬對著床頭的鏡子看了又看,終于知道自己為啥幼兒園...
    少年老徐閱讀 505評論 0 1
  • 1、react-native -v查看當(dāng)前版本2、進(jìn)入到項目根目錄執(zhí)行npm install3、在項目根目錄執(zhí)行r...
    RonnieSir閱讀 344評論 0 0
  • 如果再活一次,我寧愿自己是個沒有歷史的人,到了該結(jié)婚的年紀(jì)找一個合適并且相處不累的人 好好愛到結(jié)婚。就像我們父母那...
    __涼煙閱讀 187評論 0 0

友情鏈接更多精彩內(nèi)容