ホームページ  >  記事  >  バックエンド開発  >  PHP での依存関係の注入と制御の反転、PHP インジェクション inversion_PHP チュートリアル

PHP での依存関係の注入と制御の反転、PHP インジェクション inversion_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-12 08:52:57871ブラウズ

php依存関係の注入と制御の反転、php注入の反転


DI——Dependency InjectionDependency Injection

IoC——制御の反転

上記の 2 つの概念を理解するには、次の質問を理解する必要があります。

1. 参加者は誰ですか?

回答: 通常、3 つのパーティがあり、1 つはオブジェクト、1 つは IoC/DI コンテナ、もう 1 つはオブジェクトの外部リソースです。名詞についてもう一度説明します。オブジェクトは通常の Java オブジェクトを指します。IoC/DI コンテナは、単に IoC/DI 機能を実装するために使用されるフレームワーク プログラムを指します。オブジェクトの外部リソースは必要ですが、取得されます。オブジェクトの外部からのリソースは、オブジェクトが必要とする他のオブジェクトや、オブジェクトが必要とするファイル リソースなど、総称してリソースと呼ばれます。

2. 依存:誰が誰に依存しているのか?なぜ依存関係があるのでしょうか?

回答: 特定のオブジェクトは IoC/DI コンテナに依存します。プロジェクトでは、さまざまなクラス間にさまざまな関係があり、すべてが完全に独立していることは不可能であり、依存関係が形成されます。従来の開発では、他のクラスを使用するときに直接呼び出しますが、これは強い結合を形成するため、避けるべきです。依存関係の注入では、コンテナーを借用して依存オブジェクトを転送し、分離を実現します。

3. 注射:誰が誰に注射するのか?いったい何が注入されるのでしょうか?

答え: 必要な外部リソースをコンテナを通じてオブジェクトに注入します

4. 制御の逆転: 誰が誰を制御するのか?何を制御しますか?なぜ逆転と呼ばれるのでしょうか?

回答: IoC/DI のコンテナ制御オブジェクトは主にオブジェクト インスタンスの作成を制御します。反転は正の方向と相対的なものですが、何が正の方向とみなされるのでしょうか?通常の状況でアプリケーションを考えてみましょう。A の中で C を使用したい場合はどうしますか?もちろん、C のオブジェクトは直接作成されます。つまり、必要な外部リソース C がクラス A で能動的に取得されます。この状況を順方向と呼びます。では、逆とは何でしょうか?つまり、クラス A は積極的に C を取得するのではなく、IoC/DI コンテナが C のインスタンスを取得するのを受動的に待ち、それを逆にクラス A に注入します。

5. 依存関係の注入と制御の反転は同じ概念ですか?

答え: 上記からわかるように、依存関係の注入はアプリケーションの観点から完全に説明できます。アプリケーションは、制御の反転中に必要な外部リソースを作成して注入します。コンテナの観点から この角度は説明しており、完全に説明すると、コンテナはアプリケーションを制御し、コンテナはアプリケーションに必要な外部リソースをアプリケーションに逆に注入します。

例を通して依存関係注入の実装方法をいくつか見てみましょう:

1.コンストラクターインジェクション

リーリー

2.セッター注入

リーリー

上記 2 つのメソッドのコードは非常に明確ですが、多くの依存関係を注入する必要がある場合、多くの行を追加することになり、管理がより困難になります。

より良い解決策は、すべての依存関係のコンテナーとしてクラスを作成することです。このクラスでは、必要な依存関係を保存、作成、取得、検索できます。 リーリー

この時点で、ブックのインスタンスを取得したい場合は、 $newone = Ioc::makebook(); を実行するだけです

上記はコンテナの具体的な例です。 登録や取得にはレジストリを使用する方が良いです。 リーリー

次の方法で登録して注入できるようになりました

リーリー

参考: http://www.4wei.cn/archives/1002316

http://www.bkjia.com/PHPjc/1125521.html

www.bkjia.com本当http://www.bkjia.com/PHPjc/1125521.html技術記事 PHP での依存関係の注入と制御の反転、PHP インジェクションの逆 DIDependency Injection 依存関係の注入 IoCInversion of Control Inversion of Control 上記 2 つの概念を理解するには、次の内容を理解する必要があります...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。