私の理解:
- 依存関係とは、ClassA のインスタンスが、ClassA の新しいインスタンスをインスタンス化するために ClassB のインスタンスを必要とする場合です。
- 依存性注入は、ClassA のコンストラクターのパラメーターまたは set~DependencyNameHere~(~DependencyNameHere~ $param) 関数を介して、ClassA が ClassB のインスタンスを渡される場合です。(これは、私が完全に確信していない分野の 1 つです) .
- IoC コンテナーは、このプロジェクトのクラスのオブジェクトをインスタンス化する特定の方法を登録できるシングルトン クラスです (一度に 1 つのインスタンスのみをインスタンス化できます)。これは、私が使用してきた IoC コンテナーのクラス定義とともに、説明しようとしているものの例へのリンクです。
したがって、この時点で、より複雑なシナリオで IoC コンテナーの使用を試み始めます。現時点では、IoC コンテナーを使用するために、IoC コンテナーで定義したい依存関係を持つ、作成したいほとんどすべてのクラスの has-a 関係に制限されています。クラスを継承するクラスを作成したいが、親クラスが IoC コンテナーに登録された特定の方法で作成されている場合に限ります。
例: mysqli の子クラスを作成したいのですが、このクラスを IoC コンテナーに登録して、以前に IoC コンテナーに登録した方法で構築された親クラスでのみインスタンス化したいと考えています。コードを複製せずにこれを行う方法は考えられません (これは学習プロジェクトであるため、可能な限り「純粋」に保とうとしています)。ここに、私が説明しようとしているものの例をいくつか示します。
だからここに私の質問のいくつかがあります:
- OOPの原則を破ることなく、私がやろうとしていることは可能ですか? 私はC ++で動的メモリとコピーコンストラクタを使用してそれを達成できることを知っていますが、phpでそのような機能を見つけることができませんでした. (私は __construct 以外の他の魔法のメソッドを使用した経験がほとんどないことを認めますが、正しく理解していれば、読み取りと __clone から、コンストラクターでそれを使用して、インスタンス化されている子クラスをインスタンス化することができませんでした。親クラスのインスタンス)。
- すべての依存関係クラスの定義は、IoC に関連してどこに行く必要がありますか? (私の IoC.php の上部には、require_once('dependencyClassDefinition.php') がたくさんあるはずですか?私の直観的な反応は、もっと良い方法があるということですが、まだ思い付いていません)
- オブジェクトをどのファイルに登録する必要がありますか? 現在、クラス定義の後に IoC.php ファイルで IoC::register() へのすべての呼び出しを実行しています。
- 依存関係を必要とするクラスを登録する前に、IoC に依存関係を登録する必要がありますか? IoCに登録されたオブジェクトを実際にインスタンス化するまで匿名関数を呼び出していないので、そうではないと思いますが、それでも懸念事項です。
- 私が見落としている、または使用する必要があるものは他にありますか? 私は一度に一歩ずつ進めようとしていますが、私のコードが再利用可能になること、そして最も重要なこととして、私のプロジェクトについて何も知らない人がコードを読んで理解できることも知りたくありません。