ソフトウェア エンジニアリングの発展に伴い、保守が容易でスケーラブルなアプリケーションの作成に重点を置く開発者が増えています。中でも依存関係の注入(Dependency Injection)は、アプリケーションのテスト容易性、整理性、拡張性を実現できる非常に重要なパターンです。よく知られたプログラミング言語である PHP には、独自の依存関係注入コンテナーと関連ライブラリもあり、開発者はこれらのツールを使用して依存関係注入を実装できます。この記事では、PHP を使用して依存関係の注入を行う方法を紹介します。
PHP で依存性注入を導入する前に、まず依存性注入とは何かを理解しましょう。依存関係の注入は、クラス (または関数) が必要とするオブジェクトに直接依存せず、外部から渡されるようにするソフトウェア設計パターンです。このパターンでは、依存関係がすべての依存関係を含む外部コンテナー (依存関係注入コンテナー) に移動されるため、コードがより柔軟でスケーラブルになります。
依存関係注入パターンでは、コンストラクターまたは Setter メソッドを通じて依存関係を注入します。これらの依存関係は、他のオブジェクト、インターフェイス インスタンス、またはスカラー値にすることができます。依存関係はオブジェクトまたは単純な値の場合があり、依存関係注入クライアントは、依存関係をパラメーターとしてサービス コンテナーに渡すか、オブジェクトのセッター メソッドに注入することによって、これらの依存関係を取得します。
依存関係注入パターンを使用すると、多くの利点が得られます。主な利点の一部を以下に示します。
PHP で依存関係注入を使用する場合、依存関係注入コンテナを使用する必要があります。依存関係注入コンテナーは、実行時に依存関係を解決するのに役立つオブジェクトです。通常、依存関係注入コンテナーは、依存関係の登録と依存関係の解決の 2 つの部分で構成されます。
依存関係の登録とは、クラスまたはインターフェイスをコンテナーに登録して、それらを取得できるようにすることです。クラスまたはオブジェクトが他のオブジェクトに依存する必要がある場合、コンテナからそれらを取得できます。依存関係注入コンテナーは、コンテナーを使用するときに必要な依存関係を自動的に解決することもできます。
ここで、PHP League Container パッケージを依存関係注入コンテナとして使用します。 PHP League Container は、自動依存関係解決と外部クラスの登録をサポートする軽量の依存関係注入コンテナーです。
次のコードは、クラスをコンテナに登録する方法を示していることに注意してください:
use LeagueContainerContainer; $container = new Container; $container->add('className', 'NamespaceClassName');
add()
メソッドを使用して、クラス名 'className' をインスタンス化します。 ' を 'NamespaceClassName' という名前の完全修飾クラスに変換します。コンテナが特定のクラスの依存関係を解決する必要がある場合、コンテナはリフレクション API を使用してクラスのパラメータを取得し、それらをインスタンスに再構築します。
簡単な例を使用して、依存関係の注入を使用して EmailSender の依存関係を注入する方法を理解しましょう。
interface EmailSenderInterface { public function sendEmail($to, $message); } class EmailSender implements EmailSenderInterface { public function sendEmail($to, $message) { return mail($to, "An email", $message); } } class User { protected $emailSender; public function __construct(EmailSenderInterface $emailSender) { $this->emailSender = $emailSender; } public function sendWelcomeEmail($email) { $this->emailSender->sendEmail($email, "Welcome to my site!"); } }
上記のコードでは、クラスのセットを定義します。 EmailSender
クラスは電子メール送信者を表し、User
クラスはウェルカム電子メールの送信に使用されます。 User
クラスは、ウェルカム電子メールを送信するために、__construct
メソッドを通じて EmailSender
インスタンスを取得する必要があります。
次に、EmailSender
インスタンスを依存関係として User
クラスに挿入する必要があります。
use LeagueContainerContainer; $container = new Container; $container->add('EmailSender', 'EmailSender'); $user = $container->get('User', ['EmailSender']);
上記のコードでは、EmailSender
クラスを登録し、コンテナーでのインスタンス化を完了します。次に、User
クラスをインスタンス化し、電子メールを送信するために EmailSender
オブジェクトを挿入します。
依存関係の挿入を使用するためのベスト プラクティスをいくつか示します:
以上がPHP を依存関係注入に使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。