
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ī)制;