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

不言
發布: 2023-04-05 15:50:02
轉載
2200 人瀏覽過

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

相關標籤:
php
來源:segmentfault.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!