L'inversion de contrôle (IoC) est un principe de conception en programmation orientée objet qui peut être utilisé pour réduire le couplage entre codes informatiques. La méthode la plus courante est appelée injection de dépendances (DI). Ci-dessous nous vous présenterons les trois méthodes d’injection de dépendances en PHP.
Tutoriels recommandés : Tutoriel vidéo PHP
1. Injection de constructeur
Injectez l'objet dépendant dans l'objet dépendant via les paramètres du constructeur, et injectez-le lors de l'initialisation de l'objet.
Avantages :
Une fois l'initialisation de l'objet terminée, l'objet utilisable peut être obtenu.
Inconvénients :
● Lorsqu'il y a de nombreux objets qui doivent être injectés, la liste des paramètres du constructeur sera très longue
● Pas flexible ; assez. S'il existe plusieurs méthodes d'injection et que chaque méthode n'a besoin d'injecter que quelques dépendances spécifiées, alors plusieurs constructeurs surchargés doivent être fournis, ce qui est gênant
2. Injection de méthode setter
Le fournisseur de services IoC injecte l'objet dépendant dans la classe dépendante en appelant la fonction setter fournie par la variable membre.
Avantages :
Flexible. Les objets requis peuvent être injectés de manière sélective.
Inconvénients :
Une fois l'objet dépendant initialisé, il ne peut pas être utilisé car l'objet dépendant n'a pas encore été injecté.
3. Injection d'interface
La classe dépendante doit implémenter l'interface spécifiée, puis implémenter une fonction dans l'interface, qui est utilisée pour injection de dépendance. Le paramètre de cette fonction est l'objet à injecter.
Avantages
En injection d'interface, le nom de l'interface et le nom de la fonction n'ont pas d'importance, du moment que les paramètres de la fonction sont du type d'objet à injecter.
Inconvénients
L'intrusion est trop forte et n'est pas recommandée.
PS : Qu'est-ce qu'une intrusion ?
Si la classe A veut utiliser une fonction fournie par d'autres, si pour utiliser cette fonction, elle doit ajouter du code supplémentaire à sa propre classe, cela est intrusif.
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!