(推奨チュートリアル: PHP ビデオ チュートリアル)
制御の反転は、 idea はカップリングを軽減できるデザイン パターンです。
例
<?php class A{ public function getClassName(){ echo '我是class A'; } } 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 '我是class A'; } } 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 サイトの他の関連記事を参照してください。