ホームページ  >  記事  >  バックエンド開発  >  PHP 制御反転と依存性注入の実装の概要

PHP 制御反転と依存性注入の実装の概要

WBOY
WBOY転載
2022-09-13 17:32:021229ブラウズ

(推奨チュートリアル: PHP ビデオ チュートリアル)

制御の反転

制御の反転は、 idea はカップリングを軽減できるデザイン パターンです。

<?php
class A{
    public function getClassName(){
        echo &#39;我是class A&#39;;
    }
}
class B{
    public $test;
    public function __construct()
    {
        $this->test = new A(); 
        //在类的内部获取依赖的对象。 
        //把依赖的对象写死在 Class B 中,由 Class B 选择依赖的对象,这叫做控制正转。
    }
}
$b = new B();
$b->test->getClassName();

//出力私はクラスAです

クラスBのコンストラクターはクラスAに依存します。 ) はクラス B のコンストラクターで書かれており、この書き方は非常に高度に結合しています。

たとえば、クラス A の名前が変更された場合、クラス B のコードを変更する必要があります。

クラス B がクラス A を必要とせず、クラス C が必要な場合は、クラス B のコードを変更する必要があります。

この問題を解決するには、制御設計パターンの反転を使用できます。

<?php
class A{
    public function getClassName(){
        echo &#39;我是class A&#39;;
    }
}
class B{
    public $test;
    public function __construct($obj)
    {
        $this->test = $obj;
        //不在类的内部写死依赖的对象,而是通过外部以参数的形式传入依赖的对象,这叫控制反转。
    }
}
$b = new B (new A()); //注入 class A 的实例
$b->test->getClassName();

//出力 私はクラス A

このようにコードを変更すると、上記の 2 つの問題がよりよく解決されます。

クラス A の名前が変更された場合、クラス B のコードを変更する必要はありません。クラス B のコンストラクターに渡されるパラメーターを変更するだけで済みます。

クラス B がクラス A を必要とせず、クラス C が必要な場合、クラス B のコードを変更する必要はなく、クラス B のコンストラクターに渡されるパラメーターを変更するだけで済みます。

クラス B のコンストラクタ内に依存クラス (クラス A) を記述しないでください。代わりに、クラス B をインスタンス化するときに、依存クラス (クラス A) を外部からパラメータの形でクラスに渡します。クラス B のコンストラクターでは、クラス A が必要ない場合、クラス B のコードを変更せずに、クラス B のコンストラクターに渡されるパラメーターを変更するだけで済み、結合が大幅に軽減されます。

実際、人間の言語では、メソッド内でクラスをインスタンス化するのではなく、メソッドにパラメータを渡すことによってオブジェクトをメソッドに渡します。

この時点で、クラス B は、依存関係を能動的に選択するのではなく、外部から依存関係を受動的に受け取るようになり、依存オブジェクトの取得方法が逆転します。これが制御の反転です。

依存性注入

依存性注入は、現在のメソッドが必要とする (依存する) オブジェクトをパラメータの形式で現在のメソッドに渡します (注入します)。

依存性注入は上記のコードですでに登場しています

$b = new B (new A()); 
// class B 的构造方法需要一个对象
//注入 class A 的实例

制御の反転と依存性注入の関係を一言でまとめると、依存性注入は制御の反転を実現するために使用できます。

(推奨チュートリアル:

PHP ビデオ チュートリアル

)

以上がPHP 制御反転と依存性注入の実装の概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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