コアポイント
@Bean
や@Configuration
などの注釈で構成を簡素化し、サービスのセットアップを簡素化します。 依存関係の注入の中核は、コードの再利用性にあります。これは、オブジェクトの作成/構成を使用状況から分離することにより、高度なコードの再利用性を向上させるために設計された設計パターンです。
次のコードを検討してください:
class Test { protected $dbh; public function __construct(\PDO $dbh) { $this->dbh = $dbh; } } $dbh = new PDO('mysql:host=localhost;dbname=test', 'username', 'password'); $test = new Test($dbh);
Alejandro GervasioとFabien TotencierはどちらもDiの概念の素晴らしい説明を提供します。
ただし、このパターンには1つの欠点があります。依存関係の数が増えると、従属オブジェクトに渡す前に多くのオブジェクトを作成/構成する必要があります。最終的には、多くのボイラープレートコードと、コンストラクター内のパラメーターの長いキューが生成される可能性があります。現時点では、注入容器を依存する必要があります!
依存関係噴射コンテナ(略してDIコンテナ)は、サービスを作成し、その依存関係を処理する方法を知っているオブジェクトです。
この記事では、この概念をさらに実証するために、新しいDIコンテナであるディスコを使用します。依存関係噴射コンテナの詳細については、このトピックに関する他の記事を参照してください。
フレームワークはDIコンテナを展開する優れた例であるため、記事の最後にディスコといくつかのSymfonyコンポーネントを使用して、基本的なHTTPベースのフレームワークを作成します。
インストール
discoをインストールするには、通常どおりComposerを使用します:
コードをテストするには、PHPの組み込みWebサーバーを使用します。
class Test { protected $dbh; public function __construct(\PDO $dbh) { $this->dbh = $dbh; } } $dbh = new PDO('mysql:host=localhost;dbname=test', 'username', 'password'); $test = new Test($dbh);
その結果、アプリケーションはhttps://www.php.cn/link/7d7b04e989115e193107af57ad662dd2にアクセスできるようになります。ファイルはあります。
-t
index.php
初心者
ディスコは、コンテナと相互運用可能なDIコンテナです。ディスコは、注釈に基づいたDIコンテナです。
パッケージには、コンテナオブジェクトの特性を標準化するためのインターフェイスのセットが含まれていることに注意してください。それがどのように機能するかを理解するには、独自のSitePoint依存関係噴射コンテナの構築に関するチュートリアルを参照してください。
container-interop
コンテナにサービスを追加するには、構成クラスを作成する必要があります。このタイプは、container-interop
アノテーションマーク:を使用する必要があります
各コンテナサービスは、構成クラスのパブリックまたは保護された方法として定義する必要があります。ディスコは、各サービスをJava文化に由来するBeanを豆と呼びます。 @Configuration
composer require bitexpert/disco
注釈がマークされています。
これは、「Bean」を含むシンプルなディスコ構成クラスの例です。
@Bean
@return
デフォルトでは、すべてのサービスはSingleton Servicesとして定義されます。
php -S localhost:8000 -t web
次の豆はシングルトンの怠zyなロードサービスを作成します。
@Bean
Configurationクラスを作成した後、
<?php /** * @Configuration */ class Services { // ... }
に登録します
コンテナからサービスを取得する方法AnnotationBeanFactory
およびBeanFactoryRegistry
メソッドを使用できます。
<?php /** * @Configuration */ class Configuration { /** * @Bean * @return SampleService */ public function getSampleService() { // 实例化 $service = new SampleService(); // 配置 $service->setParameter('key', 'value'); return $service; } }
サービスの範囲get()
has()
<?php // ... /** * @Bean({"singleton"=true, "lazy"=true}) * @return \Acme\SampleService */ public function getSampleService() { return new SampleService(); } // ...
ディスコの実用的なアプリケーション
応答リスナーを作成
結論
この記事は、元のテキストの擬似オリジナル処理のみであり、微妙な調整と書き換えのコンテンツを作成し、元のテキストの一般的な意味を変えることなく、記事をよりスムーズで自然にするよう努めています。画像形式と位置は変更されていません。
以上がデザインパターンを備えたディスコ:依存関係の注入の新鮮な見方の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。