<?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
関連記事

04 Jan 2025
PHP 8.4 での Lazy オブジェクトによる依存関係の注入の探索 最新の PHP の領域では、バージョン 8.4 のリリースで画期的な機能である Lazy Objects が導入されました。これらのオブジェクトにより、絶対に必要になるまで初期化を延期する新しい方法が可能になります

10 Jan 2025
Go 言語の構造とインターフェイス: 依存性注入を使用する場合とその組み合わせ方法 この記事では、Go 言語で構造を使用する場合、インターフェイスを使用する場合、および両方を使用して依存性注入 (DI) を実装する方法について説明します。これらの概念を、簡単なおもちゃ箱の比喩を通して説明します。現実世界の例: おもちゃ箱の構造 構造物を、車などのおもちゃ箱の中の特定のおもちゃとして考えてみましょう。車には、色、サイズ、タイプ (スポーツカーなど) などの特定の属性があります。プログラミングでは、構造体はオブジェクトに関するデータを保持します。インターフェイス インターフェイスは、あらゆる種類のおもちゃを収納できるおもちゃ箱のようなものです。転がったり、音を立てたり、光ったりするなど、おもちゃができることを定義します。これらの操作を実行できるあらゆるおもちゃを配置できます。

07 Dec 2024
Angular は独自のフレームワークです。それが開発者の柔軟性にどのように広がり、日々強化されているかを見るのは本当に興奮しています。 Angular愛好家にとっては幸せな時代だと思います。 依存関係の注入と RxJS — 私の意見では、

28 Jan 2025
依存関係のインジェクションにおけるコンストラクターの狂気を避けるあなたは、以下に似た膨らんだコンストラクターの署名に遭遇する可能性があります:公開...

05 Jan 2025
このシリーズでは、PHP オブジェクト指向プログラミング (OOP) の基礎について説明します。コンテンツは連続したパートに編成され、それぞれが特定のトピックに焦点を当てます。初心者または OOP の概念に慣れていない場合は、このシリーズを参照してください。

30 Nov 2024
cURL: PHP の HTTP リクエスト ハンドラー PHP 開発の分野では、「cURL」という用語が頻繁に登場します。それは図書館です...


ホットツール Tags

Hot Tools

50 個の優れた古典的な PHP アルゴリズムのコレクション
古典的な PHP アルゴリズム、優れたアイデアを学び、思考を広げます

画像を最適化するための小さな PHP ライブラリ
画像を最適化するための小さな PHP ライブラリ

勝率アルゴリズム用の PHP 関数クラス
勝率アルゴリズム用の PHP 関数クラス
