Heim  >  Artikel  >  Backend-Entwicklung  >  Was bedeutet PHP-Abhängigkeitsinjektion?

Was bedeutet PHP-Abhängigkeitsinjektion?

WBOY
WBOYOriginal
2022-03-10 16:45:254281Durchsuche

In PHP bezieht sich die Abhängigkeitsinjektion auf die automatische Injektion von Klassenabhängigkeiten durch den Konstruktor. Sobald den Parametern in der Controller-Architekturmethode und der Betriebsmethode Objekttypbeschränkungen auferlegt werden, wird die Abhängigkeitsinjektion automatisch eliminiert. Da die Parameter für den Zugriff auf den Controller aus URL-Anforderungen stammen, werden gewöhnliche Variablen automatisch durch Parameterbindung und Objektvariablen abgerufen durch Abhängigkeiten.

Was bedeutet PHP-Abhängigkeitsinjektion?

Die Betriebsumgebung dieses Artikels: Windows 10-System, PHP-Version 7.1, Dell G3-Computer.

Was bedeutet PHP-Abhängigkeitsinjektion?

Abhängigkeitsinjektion bezieht sich im Wesentlichen auf die automatische Injektion von Klassenabhängigkeiten durch den Konstruktor. Sobald beispielsweise Objekttypbeschränkungen für Parameter in Controller-Architekturmethoden und Betriebsmethoden festgelegt werden, werden Abhängigkeiten automatisch ausgelöst .Injection: Da die Parameter des Zugriffscontrollers alle aus URL-Anfragen stammen, werden gewöhnliche Variablen automatisch durch Parameterbindung abgerufen und Objektvariablen werden durch Abhängigkeitsinjektion generiert.

Die sogenannte Abhängigkeit, zum Beispiel ist eine Klasse Person und eine andere Klasse ist Car. Wenn eine Person-Methode, wie z. B. Laufwerk, auf Car verweisen muss, soll die Person-Klasse von der Car-Klasse abhängen, die erweitert wird Diese Abhängigkeitsbeziehung gilt immer noch, beispielsweise hängt das Objekt Junge der Klasse Person vom Objekt Toyota der Klasse Auto ab. Lassen Sie uns über die Implementierung der Antriebsmethode sprechen. Nehmen wir an, dass der Code wie folgt lautet:

Public Person{
...
public void drive(){
  Car toyota=new Car("TOYOTA");
  toyota.挂档;
  toyota.踩油门;
  toyota.打方向;
}
}

Die Abhängigkeiten darin führen dazu, dass der Objektjunge für die Erstellung des Objekts Toyota und sogar für die Verwaltung des gesamten Lebens verantwortlich sein muss Zyklus, und dies führt offensichtlich zu hohen Kopplungen, schwieriger Wartung und anderen Mängeln. Wenn Sie beispielsweise möchten, dass dieser Junge einen Audi fährt, müssen Sie den personenähnlichen Code ändern.

Daher wurde in der Designtheorie von Java ein sehr bekanntes Prinzip vorgeschlagen, das Abhängigkeitsinversionsprinzip (Abhängigkeitsinversion). Die Kernidee besteht darin, die Abhängigkeiten zwischen konkreten Klassen so weit wie möglich in abstrakte Abhängigkeiten umzuwandeln Die Klasse Person sollte von der abstrakten Klasse ICar und nicht von der spezifischen Klasse Car abhängen. Hier empfiehlt Java dringend die Verwendung von Abstraktion und Schnittstellen. Was den Unterschied zwischen Abstraktion und Schnittstellen angeht, gibt es in jedem JAVA-Buch eine Einführung gehen Sie hier darauf ein.

Dieses Abhängigkeitsinversionsprinzip spiegelt sich auch in vielen Entwurfsmustern wider, z. B. im Fabrikmuster und im Build-Muster. Ich persönlich denke, dass die Umkehrung der Steuerungs-IoC tatsächlich als Entwurfsmuster angesehen werden kann, das dieses Prinzip implementiert. „Kontrollumkehr“ – ich habe nie ganz verstanden, was das Wort „Kontrolle“ bedeutet, aber eine andere Art, „Kontrollumkehr“ zu sagen, ist „Abhängigkeitsinjektion“, was ich persönlich leichter zu verstehen finde. Nehmen wir das obige Beispiel von „Boy“ und „Toyota“. Der Kern besteht darin, das Objekt „Toyota“, auf das „Boy“ angewiesen ist, in „Boy“ zu injizieren, ohne dass „Boy“ selbst auf „Toyota“ verweisen muss Beziehen Sie sich auf Toyota. Zu beachtendes Objekt, zum Beispiel:

Public Person{
private ICar car;
public Person(ICar onecar){
  car=onecar;
}
public void drive(){
  car.挂档;
  car.踩油门;
  car.打方向;
}
}

Zu diesem Zeitpunkt ist der Vorgang des Injizierens und Aufrufens wie folgt sehr einfach:

Toyota toyota=new Toyota();
Person boy=new Person(toyota);
boy.drive();

Hinweis: Hier gehen wir davon aus, dass die Toyota-Klasse eine spezifische Implementierung von ist ICar-Schnittstellenklasse.

Dieses Beispiel zeigt ein Beispiel für die einfachste Injektionsmethode, nämlich die Konstruktormethodeninjektion, die durch die Injektion abhängiger Objekte in den Konstruktor des Objekts erreicht wird. Es gibt auch eine häufig verwendete Injektionsmethode, nämlich die attributbasierte Injektion. Dies bedeutet, dass sie durch die Injektion abhängiger Objekte in die Eigenschaften des Objekts erreicht wird. Nehmen wir die Beispiele von Boy und Toyota wie folgt:

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;
}
}

Hier Zeit, Injektion und Aufruf Der Prozess sieht wie folgt aus:

Toyota toyota=new Toyota();
Person boy=new Person();
boy.setCar(toyota);
boy.drive();

An diesem Punkt sollte das Konzept der Abhängigkeitsinjektion relativ klar sein. Schauen wir uns an, wie man IoC in Spring implementiert und wie Spring als ausgereifter IoC-Container fungiert. In Spring werden hauptsächlich zwei Konzepte verwendet, um IoC zu implementieren. Erstens: Konfigurieren Sie das Objekt und die abhängigen Objekte über die XML-Konfigurationsdatei. Natürlich muss die XML-Datei den von Spring angegebenen Spezifikationen entsprechen Implementieren Sie dann das Obige automatisch über die BeanFactroy-Klasse in der Architektur. Der im Artikel beschriebene Injektionsprozess nimmt immer noch Boy und Toyota als Beispiel:

Zuerst ist die Person-Klasse immer noch dieselbe.

Dann fügen Sie etwas hinzu zur XML-Konfigurationsdatei (angenommen 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>

Zuletzt aufrufen. Der Vorgang sieht wie folgt aus:

BeanFactory factory=new XmlBeanFactory("bean.xml");
Person boy=(Person )factory.getBean("onePerson");
boy.drive();

Empfohlenes Lernen: „PHP Video Tutorial

Das obige ist der detaillierte Inhalt vonWas bedeutet PHP-Abhängigkeitsinjektion?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn