這篇文章帶給大家的內容是關於PHP依賴注入的詳細介紹(附範例),有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。
依賴注入
傳統的想法
應用程式用到一個Foo類別,就會建立Foo類別並呼叫Foo類別的方法。
假如這個方法內需要一個Bar類別,就會建立Bar類別並呼叫Bar類別的方法。
而這個方法內需要一個Bim類別,就會創建Bim類別,接著做些其它工作。
/** * Foo */ class Foo { public function doSomething($value='') { # code... $Bar = new Bar(); $Bar->doSomething(); echo 'Foo doSomething','<br />' ; } } /** * Bar */ class Bar { public function doSomething($value='') { # code... $Bim = new Bim(); $Bim->doSomething(); echo 'Bar doSomething','<br />' ; } } /** * Bim */ class Bim { public function doSomething($value='') { # code... echo 'Bim doSomething','<br />' ; } } $doSomething = new Foo(); $doSomething->doSomething();
依賴注入
應用程式用到Foo類,Foo類需要Bar類,
Bar類需要Bim類,那麼先創建Bim類,再創建Bar類並把Bim注入,再創建Foo類,並把Bar類注入,
再呼叫Foo方法,Foo呼叫Bar方法,接著做些它工作。
/** * Bim2 */ class Bim2 { public function doSomething($value='') { # code... echo 'Bim2 doSomething','<br />' ; } } /** * Bar2 */ class Bar2 { private $bim2 ; public function __construct(Bim2 $bim2) { # code... $this->bim2 = $bim2 ; } public function doSomething($value='') { # code... $this->bim2->doSomething(); echo "Bar2 doSomething",'<br />'; } } /** * Foo */ class Foo2 { private $bar2 ; public function __construct(Bar2 $bar2) { # code... $this->bar2 = $bar2 ; } public function doSomething($value='') { # code... $this->bar2->doSomething(); echo "Foo2 doSomething",'<br />'; } } $doSomething2 = new Foo2(new Bar2(new Bim2())); $doSomething2->doSomething();
這就是控制反轉模式。依賴關係的控制反轉到呼叫鏈的起點。這樣你可以完全控制依賴關係,透過調整不同的注入對象,來控製程式的行為。
例如Foo類別用到了memcache,可以在不修改Foo類別程式碼的情況下,改用redis。
使用依賴注入容器後的思路是應用程式需要到Foo類,就從容器內取得Foo類,容器創建Bim類,再創建Bar類並把Bim注入,再創建Foo類,並把Bar注入,應用程式呼叫Foo方法,Foo呼叫Bar方法,接著做些它工作.
擴充:容器負責實例化,注入依賴,處理依賴關係等工作。
#以上是PHP依賴注入的詳細介紹(附範例)的詳細內容。更多資訊請關注PHP中文網其他相關文章!