1. 程式人生 > >Laravel 學習筆記:深入理解控制反轉(IoC)和依賴注入(DI)

Laravel 學習筆記:深入理解控制反轉(IoC)和依賴注入(DI)

這裡寫圖片描述
目的:解耦和減少依賴關係;

控制反轉(IoC):由外部負責其依賴行為;

例如“超人”類不需要在其內部固化它的“超能力”,而是由外部來產生、組裝“超能力”,再通過“超人”的某個介面中植入;

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

依賴注入(DI):物件的依賴,由外部以引數或其他的形式傳入;

例如“超人”的構造器,接收一個實現了“超能力”介面的物件,這樣所有人都能給超人制造“超能力”,只要這個“超能力”遵循“超能力”介面;

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

主角:IoC 容器;

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

IoC 容器是一個更為先進的“工廠”,它可以根據預定的指令碼,自動組裝類所需要的依賴;

基本原理:我們通過註冊、繫結的方式向容器中新增一段可以被執行的回撥(可以是匿名函式、非匿名函式、類的方法)作為生產一個類的例項的 指令碼 ,只有在真正的 生產(make) 操作被呼叫執行時,才會觸發;

這樣一種方式,使得我們更容易在建立一個例項的同時解決其依賴關係,並且更加靈活。當有新的需求,只需另外繫結一個“生產指令碼”即可;

Laravel 的 IoC 容器更加高階,可以根據類的需求,自動註冊、繫結符合的依賴,並自動注入到建構函式中去;

其原理也並不是很複雜,是使用了 PHP 的反射機制;