<?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 が導入されました。これらのオブジェクトにより、絶対に必要になるまで初期化を延期する新しい方法が可能になります

18 Jul 2025
依存関係注射は、テスト可能性、保守性、デカップリングを改善するため、JavaScriptで役立ちます。 1.コンストラクターインジェクションは、クラス構造に適したコンストラクターを介して依存関係を通過し、明確で測定しやすいです。 2。メソッドインジェクションは、特定の方法で依存関係が必要な状況に適したメソッドパラメーターとして依存関係を渡します。 3.複雑なプロジェクトに適した依存関係を均一に管理するために、inversifyjsやカスタムコンテナなどのIOCコンテナを使用します。実用的な推奨事項には、ハードコーディングされた依存関係の回避、コンストラクターを簡潔に保ち、明確な命名を使用し、インターフェイスの抽象化の優先順位付けにより、コードの柔軟性とモジュール性が向上します。

08 May 2025
依存関係注射(DI)を使用する理由は、コードのゆるい結合、テスト可能性、および保守性を促進するためです。 1)コンストラクターを使用して依存関係を注入します。2)サービスロケーターの使用を避け、3)依存関係噴射コンテナを使用して依存関係を管理する、4)依存関係を注入することでテスト可能性を向上させる、5)注入依存性を回避、6)パフォーマンスに対するDIの影響を考慮します。

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

17 May 2025
依存症(di)inphpisadesignpatterntatpromotesign oseCoupling、testability、およびmaintainability bymanaging objectdependenciesedally.1)diachievesiveSiversion ofcontrol of dependionsinversions dopentinciesthroughconstructors、セッター、ormethodparameters.2)distemesivevesive inversion

03 Aug 2025
DependencyInjection(di)$ globalShidesthem.2.diimprovestestabilityの依存性による依存性の依存性の$ globalshidesthem.2.dieasyManipulatingglobalState.3.ductupeStightcouplingbydecoupなどの依存性を維持することで、依存性$ globals becaudeItmakesdependenciesexplicitの発行中心


ホットツール Tags

ホットツール

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

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

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