<?php namespace Auryn; class CachingReflector implements Reflector { const CACHE_KEY_CLASSES = 'auryn.refls.classes.'; const CACHE_KEY_CTORS = 'auryn.refls.ctors.'; const CACHE_KEY_CTOR_PARAMS = 'auryn.refls.ctor-params.'; const CACHE_KEY_FUNCS = 'auryn.refls.funcs.'; const CACHE_KEY_METHODS = 'auryn.refls.methods.'; private $reflector; private $cache; public function __construct(Reflector $reflector = null, ReflectionCache $cache = null) { $this->reflector = $reflector ?: new StandardReflector; $this->cache = $cache ?: new ReflectionCacheArray; } public function getClass($class) { $cacheKey = self::CACHE_KEY_CLASSES . strtolower($class); if (!$reflectionClass = $this->cache->fetch($cacheKey)) { $reflectionClass = new \ReflectionClass($class); $this->cache->store($cacheKey, $reflectionClass); } return $reflectionClass; }
私たちの考えは、アプリケーションが Foo クラスを使用するとき、Foo クラスを作成し、Foo クラスのメソッドを呼び出すことです。このメソッドが Bar クラスを必要とする場合、Bar クラスを作成し、Bar クラスを呼び出します。このメソッドには Bim クラスが必要であり、Bim クラスを作成してから他の作業を実行します。依存関係注入を使用する考え方は、アプリケーションが Foo クラスを使用し、Foo クラスには Bar クラスが必要で、Bar クラスには Bim クラスが必要です。次に、最初に Bim クラスを作成し、次に Bar クラスを作成して Bim を注入します。次に、 Foo クラスを作成し、 Bar クラスを挿入して、 Foo メソッドを呼び出し、 Foo が Bar メソッドを呼び出し、その後、他の作業を実行します。これは制御の反転パターンです。依存関係の制御は、呼び出しチェーンの先頭まで逆に行われます。このようにして、依存関係を完全に制御し、注入されたさまざまなオブジェクトを調整することでプログラムの動作を制御できます。たとえば、Foo クラスは memcache を使用しますが、Foo クラスのコードを変更せずに代わりに redis を使用できます。
依存関係注入コンテナーの使用の背後にある考え方は、アプリケーションが Foo クラスを取得する必要がある場合、コンテナーから Foo クラスを取得し、コンテナーが Bim クラスを作成し、次に Bar クラスを作成して Bim を注入するというものです。次に、Foo クラスを作成し、それを Bim クラスに注入します。Bar インジェクション、アプリケーションは Foo メソッドを呼び出し、Foo は Bar メソッドを呼び出し、その後、他の作業を行います。つまり、コンテナはインスタンス化、依存関係の注入、依存関係の処理など。
このサイトのすべてのリソースはネチズンによって提供されたもの、または主要なダウンロード サイトによって転載されたものです。ソフトウェアの整合性をご自身で確認してください。このサイトのすべてのリソースは学習の参考のみを目的としています。商業目的で使用しないでください。そうでない場合は、すべての結果に対して責任を負うことになります。侵害がある場合は、削除するためにご連絡ください。連絡先情報: admin@php.cn
関連記事
15Jun2017
この記事では、主に PHP の依存性注入 (DI) と制御の反転 (IoC) に関する情報を紹介します。興味のある方は参照してください。まず、依存性の注入と制御の反転は同じことについて話しています。これは、プログラム間の結合を減らすために使用されるデザイン パターンです。少し調べてみると、TP の公式 Web サイトに該当する記事がなかったので、このデザイン パターンを紹介するためにこのささやかな記事を書きました。 TP コミュニティが少しでも力を発揮できるようになれば幸いです。まず第一に、このデザイン パターンの定義を追求しないでください。そうしないと、作成者は間違いなく何百回も混乱することになります。
27Apr2024
回答: PHP の依存関係インジェクションとサービス コンテナーは、依存関係を柔軟に管理し、コードのテスト容易性を向上させるのに役立ちます。依存関係の注入: 依存関係をコンテナー経由で渡し、関数内での直接作成を回避し、柔軟性を向上させます。サービスコンテナ: プログラム内で簡単にアクセスできるように依存関係インスタンスを保存し、疎結合をさらに強化します。実際のケース: サンプル アプリケーションは、依存関係の注入とサービス コンテナーの実際のアプリケーションを示し、疎結合の利点を反映してコントローラーに依存関係を注入します。
17Jul2017
はじめに 最後に、この有名な設計原則について説明しましょう。実際、これは他の設計パターンよりも単純です。 依存関係注入の本質は、クラスの交換不可能な部分を交換可能な部分から分離し、それらを注入を通じて使用して分離の目的を達成することです。これはデータベース リンクの例です。class Mysql{ private $host; を理解していただければ幸いです。
27Aug2023
ThinkPHP6 コンテナー使用ガイド: 依存性注入の実践的な紹介: 最新の PHP 開発では、コンテナーを使用して依存性注入を実装することが一般的な技術的手段です。 ThinkPHP フレームワークの最新バージョンである ThinkPHP6 では、開発者が依存関係の注入を実践しやすくするために、コンテナー コンポーネントも統合されています。この記事では、ThinkPHP6 でコンテナを正しく使用する方法を詳しく紹介し、読者の理解を深めるためにサンプル コードを使用します。 1. コンテナとは何ですか?コンテナは、クラスのインスタンスの管理を担当するオブジェクトです。
07Jul2023
Vue コンポーネント通信: 依存関係の注入に Provide/Inject を使用する Vue 開発では、コンポーネント通信は重要かつ一般的な要件です。 Vue は、コンポーネントが通信するためのさまざまな方法を提供します。その 1 つは、provide/inject を使用してコンポーネントに依存関係を注入することです。 Provide と inject は Vue の 2 つの関連オプションで、親コンポーネントにデータまたはメソッドを提供し、それらを子コンポーネントに注入するために使用できます。他のコンポーネント通信方式と比較して、
06Jul2018
この記事では主にPHPのサービスコンテナと依存性注入について紹介していますが、参考になる内容ですので、必要な方は参考にしていただければと思い、共有させていただきます。
Hot Tools
50 個の優れた古典的な PHP アルゴリズムのコレクション
古典的な PHP アルゴリズム、優れたアイデアを学び、思考を広げます
画像を最適化するための小さな PHP ライブラリ
画像を最適化するための小さな PHP ライブラリ
勝率アルゴリズム用の PHP 関数クラス
勝率アルゴリズム用の PHP 関数クラス