首頁 >後端開發 >php教程 >PHP依賴注入的詳細介紹(附範例)

PHP依賴注入的詳細介紹(附範例)

不言
不言轉載
2019-03-14 13:20:242293瀏覽

這篇文章帶給大家的內容是關於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中文網其他相關文章!

陳述:
本文轉載於:segmentfault.com。如有侵權,請聯絡admin@php.cn刪除