引言
什么是依賴注入
當某個角色需要另一個角色的協助時,在傳統的程序設計過程中,通常由調用者來創建被調用者的實例。但在Spring里,創建被調用者的工作不再由調用者來完成,因此稱為控制反轉;創建被調用者 實例的工作通常由Spring容器來完成,然后注入調用者,因此也稱為依賴注入。
php中傳遞依賴關系的三種方案
其實要理解DI,首先要明白在php中如何傳遞依賴關系。
第一種方案,也是最不可取的方案,就是在A類中直接用new關鍵詞來創建一個B類,如下代碼所示:
<?phpclass A{ public function __construct() { $b = new B(); }}
為什么這種方案不可取呢?因為這樣的話,A與B就耦合在了一起,也就是說A類無法脫離B類工作。
第二種方案就是在A類的方法中傳入需要的B類,如下代碼所示:
<?phpclass A{ public function __construct(B $b) { }}
這種方法比第一種方案有了改進,A類不必與B類捆綁在一起,只要傳入的類滿足A類的需求,也可以是C類,也可以是D類等等。
但是這種方案的弊端在于如果A類依賴的類較多,參數列表會很長,容易發生混亂。
第三種方案是使用set方法傳入,如下代碼所示:
<?phpclass A{ public function setB(B $b) { $this->b = $b; }}
這種方案同樣存在和第二種方案一樣的弊端,當依賴的類增多時,我們需要些很多很多的set方法。
這時我們在想如果有一個專門的類(或者說一個容器)可以幫我們管理這些依賴關系就好了。
一個簡單的依賴注入的例子
如下代碼來自twittee:
<?phpclass Container { private $s=array(); function __set($k, $c) { $this->s[$k]=$c; } function __get($k) { return $this->s[$k]($this); }}
有了container類之后我們可以怎樣管理A與B之間的依賴關系呢,用代碼說話吧:
<?phpclass A{ private $container; public function __construct(Container $container) { $this->container = $container; } public function doSomeThing() { //do something which needs class B $b = $this->container->getB(); //to do }}
再將B類注入到容器類中:
$c = new Container();$c->setB(new B());
還可以傳入一個匿名函數,這樣B類就不會在傳入時就立即實例化,而是在真正調用時才完成實例化的工作:
$c = new Container();$c->setB(function (){ return new B();});
這里舉的只是一個很簡單的例子,在實際中,容器類要考慮的有很多,比如延遲加載等等。
上述就是小編為大家分享的php中依賴注入的實現方法了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注本站行業資訊頻道。
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
c語言中正確的字符常量是用一對單引號將一個字符括起表示合法的字符常量。例如‘a’。數值包括整型、浮點型。整型可用十進制,八進制,十六進制。八進制前面要加0,后面...
2022年天津專場考試原定于3月19日舉行,受疫情影響確定延期,但目前延期后的考試時間推遲。 符合報名條件的考生,須在規定時間登錄招考資訊網(www.zha...
:喜歡聽,樂意看。指很受歡迎?!巴卣官Y料”喜聞樂見:[ xǐ wén lè jiàn ]詳細解釋1. 【解釋】:喜歡聽,樂意看。指很受歡迎。2. 【示例】:這是...
科興控股是國企嗎?科興控股并不是國企??婆d控股全稱為北京科興生物制品有限公司,它是由科新控股有限公司和北京北大未名生物工程集團有限責任公司共同出資建立的一家企業,屬于生物高科技技術行業。2001年,北京科興生物制品有限公司正式在北京中關村高科技園區注冊成立??婆d控股簡介北京科興控股公司是中國境內第一家在美國證券交易所上市的疫苗企業。除此以外,北京科興生物制品有限公司還擁有一個子公司,其名字為唐山銀...
(資料圖)在生活中,很多人都不知道300英雄三笠的稱號如何獲得是什么意思,其實他的意思是非常簡單的,下面就是小編搜索到的300英雄三笠的稱號如何獲得相關的一些知識,我們一起來學習下吧!參與活動,在300大作戰累計登錄滿7天,即可在300英雄獲得稱號。參與三笠祭所有活動前提條件:1、參與三笠祭所有活動,都需使用同一賬號登錄2個游戲,300大作戰和300英雄;2、三笠祭所有活動任務都需前往300大作戰...
(資料圖片僅供參考)提起掃描后的文件怎么才能編輯大家在熟悉不過了,被越來越多的人所熟知,那你知道掃描后的文件怎么才能編輯嗎?快和小編一起去了解一下吧!掃描后的文件的編輯方法是可以直接在圖片編輯軟件如PHOTOSHOP中處理并編輯;如果打描的是打印的文字稿,可用OCR軟件識別后用OFFICE軟件處理。用掃描儀掃描后生成的電子圖片。便于攜帶和保存,是各企、事業單位進行材料保。用于某些特殊申請中的資料。...