Maison  >  Article  >  développement back-end  >  Que signifie l’injection de dépendances php ?

Que signifie l’injection de dépendances php ?

WBOY
WBOYoriginal
2022-03-10 16:45:254337parcourir

En PHP, l'injection de dépendances fait référence à l'injection automatique de dépendances de classe via le constructeur. Une fois que les contraintes de type d'objet sont placées sur les paramètres dans la méthode d'architecture du contrôleur et la méthode de fonctionnement, l'injection de dépendances sera automatiquement éliminée. Étant donné que les paramètres d'accès au contrôleur proviennent de requêtes URL, les variables ordinaires sont automatiquement obtenues via la liaison de paramètres et les variables d'objet sont obtenues. via des dépendances.

Que signifie l’injection de dépendances php ?

L'environnement d'exploitation de cet article : système Windows 10, PHP version 7.1, ordinateur Dell G3.

Que signifie l'injection de dépendances PHP ?

L'injection de dépendances fait essentiellement référence à l'injection automatique de dépendances de classe via le constructeur. Par exemple, une fois que les contraintes de type d'objet sont placées sur les paramètres dans les méthodes d'architecture du contrôleur et les méthodes de fonctionnement, les dépendances seront automatiquement déclenchées. . Injection, puisque les paramètres du contrôleur d'accès proviennent tous de requêtes URL, les variables ordinaires sont automatiquement obtenues via la liaison de paramètres et les variables d'objet sont générées via l'injection de dépendances.

La soi-disant dépendance, par exemple, une classe est Person et une autre classe est Car Si une méthode de Person, telle que drive, doit faire référence à Car, on dit que la classe Person dépend de la classe Car, qui s'étend. à l'objet. Cette relation de dépendance est toujours vraie, par exemple, l'objet boy de la classe Person dépend de l'objet Toyota de la classe Car. Parlons de l'implémentation de cette méthode de pilotage. Supposons que le code soit le suivant :

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

Les dépendances dans ce résultat font que l'objet garçon doit être responsable de la création de l'objet Toyota, et même de la gestion de toute la vie. cycle, et cela entraînera évidemment un couplage élevé, difficile à entretenir et d'autres défauts. Par exemple, si vous voulez que ce garçon conduise une Audi, vous devez modifier le code de type Personne.

C'est pourquoi un principe très célèbre a été proposé dans la théorie du design Java, le principe d'inversion de dépendance (Dependence Inversion). L'idée principale est de convertir autant que possible les dépendances entre classes concrètes en dépendances abstraites, c'est-à-dire la classe. La personne devrait s'appuyer sur la classe abstraite ICar, plutôt que sur la classe spécifique Car. Ici, Java recommande fortement l'utilisation de l'abstraction et des interfaces. Quant à la différence entre l'abstraction et les interfaces, tout livre JAVA a une introduction, je n'entrerai donc pas dans les détails. ça ici.

Ce principe d'inversion de dépendance se reflète également dans de nombreux modèles de conception, tels que le modèle d'usine et le modèle de construction. Personnellement, je pense que l'inversion du contrôle IoC peut en fait être considérée comme un modèle de conception qui implémente ce principe. Inversion de contrôle, je n'ai jamais bien compris ce que signifie le mot contrôle, mais une autre façon de dire inversion de contrôle est injection de dépendance, que je trouve personnellement plus facile à comprendre. Prenons l'exemple de Boy et Toyota ci-dessus. L'essentiel est d'injecter l'objet Toyota dont dépend le garçon, sans que le garçon ait à référencer Toyota lui-même. Ce processus d'injection est généralement complété par un programme de contrôle, sans que le garçon ait besoin de le faire. se réfère à Toyota. Objet à prendre en compte, par exemple :

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

À l'heure actuelle, le processus d'injection et d'appel est très simple, comme suit :

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

Remarque : nous supposons ici que la classe Toyota est une implémentation spécifique de la classe Toyota. Classe d'interface ICar.

Cet exemple montre un exemple de la méthode d'injection la plus simple, c'est-à-dire l'injection de la méthode constructeur, qui est obtenue en injectant des objets dépendants dans le constructeur de l'objet. Il existe également une méthode d'injection couramment utilisée, qui est l'injection basée sur les attributs, ce qui signifie qu'elle est obtenue en injectant des objets dépendants dans les propriétés de l'objet. Prenons les exemples de boy et toyota, comme suit :

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

À ce propos. time, inject and call Le processus devient le suivant :

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

À ce stade, le concept d'injection de dépendances devrait être relativement clair. Voyons comment implémenter IoC dans Spring et voyons comment Spring agit comme un conteneur IoC mature. Dans Spring, c'est principalement via Deux concepts qui sont utilisés pour implémenter IoC. Premièrement, configurer l'objet et les objets dépendants dans un fichier XML via le fichier de configuration XML. Bien entendu, le fichier XML doit être conforme aux spécifications spécifiées par Spring, et. puis implémentez automatiquement ce qui précède via la classe BeanFactroy dans l'architecture. Le processus d'injection décrit dans l'article prend toujours Boy et Toyota comme exemple, comme suit :

Tout d'abord, la classe Person est toujours la même,

Ensuite, ajoutez quelque chose. au fichier de configuration xml - (supposé être 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>

Enfin, appelez Le processus devient le suivant :

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

Apprentissage recommandé : "Tutoriel vidéo PHP"

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn