PHP では、依存関係の注入は、コンストラクターを介したクラスの依存関係の自動注入を指します。コントローラーのアーキテクチャ方式と操作方式のパラメーターにオブジェクト型制約を設定すると、依存性注入は自動的に排除されますコントローラーにアクセスするためのパラメーターはURLリクエストから取得されるため、通常の変数はパラメーターバインディングによって自動的に取得され、オブジェクト変数は取得されますインジェクションの生成。
この記事の動作環境: Windows 10 システム、PHP バージョン 7.1、Dell G3 コンピューター。
依存関係の注入とは、本質的には、コンストラクターを介してクラスの依存関係を自動的に注入することを指します。たとえば、コントローラー アーキテクチャのメソッドと操作メソッドにパラメーターが注入されると、 , オブジェクト型の制約により、依存関係の注入が自動的にトリガーされます。アクセス コントローラーのパラメーターは URL リクエストから取得されるため、通常の変数はパラメーターのバインドを通じて自動的に取得され、オブジェクト変数は依存関係の注入を通じて生成されます。
いわゆる依存関係は、たとえば、クラス person と別のクラス Car です。ドライブなどの person のメソッドが Car を参照する必要がある場合、person クラスは Car クラスに依存していると言われます。この依存関係は今でも維持されており、たとえば、Person クラスのオブジェクト Boy は、Car クラスのオブジェクト Toyota に依存します。このドライブ メソッドの実装について話しましょう。コードが次のようであると仮定します。
Public Person{ ... public void drive(){ Car toyota=new Car("TOYOTA"); toyota.挂档; toyota.踩油门; toyota.打方向; } }
この依存関係により、オブジェクト Boy はオブジェクト toyota の作成、さらには管理を担当する必要があります。これは明らかに、高結合やメンテナンスの難しさなどの欠点をもたらします。たとえば、この少年にアウディを運転させたい場合は、人物のようなコードを変更する必要があります。
したがって、Java 設計理論では非常に有名な原則である依存関係反転原則が提案されています。その中心となる考え方は、具体的なクラス間の依存関係を可能な限り抽象的な依存関係に変換することです。クラス Person は、特定のクラス Car ではなく、抽象クラス ICar に依存する必要があります。Java では、抽象化とインターフェイスの使用を強く推奨しています。抽象化とインターフェイスの違いについては、JAVA の本で紹介されています。私は言いません。もうここではもう。
この依存関係反転の原理は、ファクトリモードやビルドモードなど多くのデザインパターンにも反映されており、制御反転IoCはまさにこの原理を実現したデザインパターンと言えるのではないかと個人的には考えています。制御の反転、制御という言葉の意味がよくわかりませんでしたが、制御の反転を表す別の用語は依存性注入であり、個人的にはこの方が理解しやすいと思います。上記のboyとtoyotaの例を見てみましょう. コアは、boyがtoyota自身を参照することなく、boyが依存するオブジェクトtoyotaをboyに注入することです. この注入プロセスは通常、制御プログラムによって完了し、boyが操作する必要はありません対象となるオブジェクトの例:
Public Person{ private ICar car; public Person(ICar onecar){ car=onecar; } public void drive(){ car.挂档; car.踩油门; car.打方向; } }
現時点では、注入と呼び出しのプロセスは次のように非常に単純です:
Toyota toyota=new Toyota(); Person boy=new Person(toyota); boy.drive();
注: ここでは、Toyota を想定しています。 class は ICar インターフェイス クラスの特定の実装です。
この例では、最も単純な注入方法、つまりコンストラクター メソッド注入の例を示します。これは、依存オブジェクトをオブジェクトのコンストラクターに注入することによって実現されます。また、一般的に使用される注入方法として、属性注入があります。これは、オブジェクトの属性に依存オブジェクトを注入することによって実現されます。次のように、boy と toyota の例を考えてみましょう:
Public Person{ private ICar car; public Person(){ } public void drive(){ car.挂档; car.踩油门; car.打方向; } public ICar getCar(){ return this.car; } public void setCar(ICar onecar){ car=onecar; } }
この時点で、注入と呼び出しのプロセスは次のようになります:
Toyota toyota=new Toyota(); Person boy=new Person(); boy.setCar(toyota); boy.drive();
この時点で、依存関係注入の概念は比較的明確になっているはずです。Spring で IoC を実装する方法と、Spring がどのように IoC を実装するかを見てみましょう。 Spring は成熟した IoC コンテナになることができます, Spring は実際には主に 2 つの概念を通じて IoC を実装します. まず、XML 構成ファイルを通じて、オブジェクトと依存オブジェクトが XML ファイルに構成されます. もちろん、XML ファイルは、IoC で指定された仕様に準拠する必要がありますSpring に続いて、アーキテクチャ BeanFactroy クラスを介して、上記の注入プロセスを自動的に実装します。または、次のように、boy と toyota を例に挙げます。 #次に、xml 構成ファイルにポイントを追加します (bean.xml であるとします):
<?xml version="1.0" encoding="GBK"?> <!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <bean id="oneCar" class="Toyota"> <!-- Toyota类是ICar的一个实现--> </bean> <bean id="onePerson" class="Person"> <!--本例以属性方式注入为例 --> <property name="car"> <ref bean="oneCar"></ref> </property> </bean> </beans>
最後に、呼び出しプロセスは次のようになります:
BeanFactory factory=new XmlBeanFactory("bean.xml"); Person boy=(Person )factory.getBean("onePerson"); boy.drive();
推奨される学習: "
PHP ビデオ チュートリアル"
以上がPHPの依存性注入とはどういう意味ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。