Nette は、PHP 言語に基づいたオープンソースの Web アプリケーション フレームワークです。その中心的な機能の 1 つは、制御の反転 (IoC) コンテナーです。これにより、オブジェクトを管理し、依存関係の注入を通じてアプリケーションのコンポーネントを分離できます。
この記事では、Nette Framework の IoC コンテナについて詳しく説明し、それをアプリケーションで使用してコードの品質と保守性を向上させる方法を学びます。
ステップ 1: IoC コンテナを構成する
Nette フレームワークでは、IoC コンテナの構成ファイルはデフォルトで app/config/config.neon にあります。このファイルでサービスを定義し、アプリケーション内の他の場所でサービスを参照する必要があります。
以下は、logger という名前のサービスを定義する簡単な例です。
services:
logger: class: AppLogger
ここでは、AppLogger Serve という名前のクラスを定義します。必要に応じて IoC コンテナが自動的にインスタンス化するため、ここでインスタンス化する必要はありません。サービスコンテナ内で定義するだけで使用できるようになります。
ステップ 2: サービスにアクセスする
IoC コンテナ内のサービスにアクセスするには 2 つの方法があります。 1 つ目の方法は、以下に示すように、コントローラーのコンストラクターにサービスを挿入することです。
use NetteApplicationUIController;
class ExampleController extends Controller
{
private $logger; public function __construct(AppLogger $logger) { $this->logger = $logger; } public function renderDefault() { $this->logger->log('Hello, world!'); }
}
ここでは、コントローラーのコンストラクターを通じてロガー サービスを挿入します。通常のオブジェクトと同じように使用できます。
2 番目の方法は、Nette フレームワークの自動インジェクション機能を使用することです。サービスを自動注入用のコンストラクターのパラメーターとしてマークするだけで、依存関係注入コンテナーがサービスを自動的に注入します。これは次の方法で実現できます:
use NetteApplicationUIController;
class ExampleController extends Controller
{
/** @var AppLogger @inject */ public $logger; public function renderDefault() { $this->logger->log('Hello, world!'); }
}
ここで、マークを付けます。 AppLogger タイプの $logger プロパティを設定し、 @Inject タグを使用して Nette フレームワークにそれを挿入するように指示します。
ステップ 3: タグを使用する
場合によっては、サービスのコンストラクターに他のサービスを挿入する必要があります。この問題を解決するために、Nette フレームワークはタグの概念を提供します。タグは、サービス (またはサービスのセット) を表す文字列です。 IoC コンテナはオブジェクトをインスタンス化するときに、オブジェクトのコンストラクター パラメーターをチェックし、パラメーターがマークされている場合は、そのマークで表されるサービスを注入します。
ここでは、2 つのサービス (ロガーとデータベース) を定義し、タグを使用してそれらを Calculator オブジェクトに挿入する例を示します。
services:
logger: class: AppLogger database: class: AppDatabase calculator: class: AppCalculator arguments: - @logger - @database
ここでは、3 つのサービスを定義します。サービス: ロガー、データベース、計算機。ロガーとデータベースは通常のサービスとして宣言されており、電卓は引数内のタグを使用してロガーとデータベースのサービスを参照します。タグは @ 記号で始まることに注意してください。
Calculator オブジェクトをインスタンス化すると、IoC コンテナは自動的にロガー サービスとデータベース サービスを挿入し、それらを Calculator オブジェクトのコンストラクターに渡します。
概要
この記事では、Nette フレームワークの IoC コンテナを詳しく調べ、アプリケーションでそれを使用する方法を学びました。 IoC コンテナの基本的な知識を習得すると、より優れた PHP コードを作成し、コードの品質と保守性を向上させることができます。この記事がお役に立てば幸いです!
以上がNette フレームワークで制御反転 (IoC) コンテナを使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。