ホームページ  >  記事  >  バックエンド開発  >  PHP 依存関係注入の詳細な紹介 (例付き)

PHP 依存関係注入の詳細な紹介 (例付き)

不言
不言転載
2019-03-14 13:20:242189ブラウズ

この記事では、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();

Dependency Injection

アプリケーションは Foo クラスを使用します。Foo クラスには Bar クラスが必要です。
Bar クラスには Bim クラスが必要です。次に、最初に Bim クラスを作成し、次に Bar クラスを作成して Bim Inject を配置します。 、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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。