Maison >développement back-end >tutoriel php >Comment utiliser PHP pour l'injection de dépendances
Avec le développement du génie logiciel, de plus en plus de développeurs se concentrent sur l'écriture d'applications faciles à maintenir et évolutives. Parmi eux, l'injection de dépendances (Dependency Injection) est un modèle très important, qui permet d'atteindre la testabilité, l'organisabilité et l'évolutivité des applications. En tant que langage de programmation bien connu, PHP possède également son propre conteneur d'injection de dépendances et les bibliothèques associées. Les développeurs peuvent utiliser ces outils pour implémenter l'injection de dépendances. Cet article explique comment utiliser PHP pour l'injection de dépendances.
Avant de commencer à introduire l'injection de dépendances en PHP, comprenons d'abord ce que sont les dépendances. L'injection de dépendances est un modèle de conception logicielle qui permet à une classe (ou une fonction) de ne plus dépendre directement des objets dont elle a besoin, mais qui est transmise de l'extérieur. Ce modèle rend le code plus flexible et évolutif car les dépendances sont déplacées vers un conteneur externe contenant toutes les dépendances, appelé conteneur d'injection de dépendances.
Dans le modèle d'injection de dépendances, nous injectons des dépendances via des constructeurs ou des méthodes Setter. Ces dépendances peuvent être d'autres objets, instances d'interface ou valeurs scalaires. Une dépendance peut être un objet ou une valeur simple, et le client d'injection de dépendances obtient ces dépendances en les transmettant en tant que paramètres au conteneur de services ou en les injectant dans des méthodes de définition de l'objet.
L'utilisation du modèle d'injection de dépendances peut apporter de nombreux avantages. Voici quelques-uns des principaux avantages :
Lorsque nous utilisons l'injection de dépendances en PHP, nous devons utiliser un conteneur d'injection de dépendances. Un conteneur d'injection de dépendances est un objet qui nous aide à résoudre les dépendances au moment de l'exécution. En règle générale, un conteneur d'injection de dépendances se compose de deux parties : l'enregistrement des dépendances et la résolution des dépendances.
Enregistrer des dépendances consiste à enregistrer des classes ou des interfaces dans le conteneur afin qu'elles puissent être récupérées. Lorsqu'une classe ou un objet doit dépendre d'autres objets, il peut les obtenir à partir du conteneur. Les conteneurs d'injection de dépendances peuvent également résoudre automatiquement les dépendances, ce qui est nécessaire lors de l'utilisation de conteneurs.
Maintenant, nous allons utiliser le package PHP League Container comme conteneur d'injection de dépendances. PHP League Container est un conteneur d'injection de dépendances léger qui prend en charge la résolution automatique des dépendances et l'enregistrement des classes externes.
Veuillez noter que le code suivant démontre la méthode d'enregistrement d'une classe dans le conteneur :
use LeagueContainerContainer; $container = new Container; $container->add('className', 'NamespaceClassName');
Nous utilisons la méthode add()
pour ajouter le nom de classe 'className' est mappé à une classe avec le nom complet 'NamespaceClassName'. Lorsque le conteneur aura besoin de résoudre les dépendances de certaines classes, il utilisera l'API de réflexion pour obtenir les paramètres de la classe et les reconstruire en instances. add()
方法将对类名 'className' 的实例化映射到完全限定的名称为 'NamespaceClassName' 的类。 当容器需要解析某些类的依赖关系时,它将使用反射 API 来获取类的参数并将它们重建成实例。
让我们通过一个简单的示例来了解如何使用依赖注入来注入一个 EmailSender 依赖项。
interface EmailSenderInterface { public function sendEmail($to, $message); } class EmailSender implements EmailSenderInterface { public function sendEmail($to, $message) { return mail($to, "An email", $message); } } class User { protected $emailSender; public function __construct(EmailSenderInterface $emailSender) { $this->emailSender = $emailSender; } public function sendWelcomeEmail($email) { $this->emailSender->sendEmail($email, "Welcome to my site!"); } }
在上面的代码中,我们定义了一组类。 EmailSender
类表示一个邮件发送器,而 User
类用来发送欢迎邮件。 User
类需要通 __construct
方法来获取一个 EmailSender
实例,以便发送欢迎邮件。
现在,我们需要将 EmailSender
实例作为依赖注入到 User
类中。
use LeagueContainerContainer; $container = new Container; $container->add('EmailSender', 'EmailSender'); $user = $container->get('User', ['EmailSender']);
在上面的代码中,我们注册 EmailSender
类,并在容器中完成实例化。接下来,我们实例化 User
类,并注入 EmailSender
Dans le code ci-dessus, nous définissons un ensemble de classes. La classe EmailSender
représente un expéditeur d'e-mails, tandis que la classe User
est utilisée pour envoyer des e-mails de bienvenue. La classe User
doit obtenir une instance EmailSender
via la méthode __construct
afin d'envoyer l'e-mail de bienvenue.
EmailSender
en tant que dépendance dans la classe User
. #🎜🎜#rrreee#🎜🎜#Dans le code ci-dessus, nous enregistrons la classe EmailSender
et terminons l'instanciation dans le conteneur. Ensuite, nous instancions la classe User
et injectons l'objet EmailSender
pour envoyer l'e-mail. #🎜🎜##🎜🎜##🎜🎜#Bonnes pratiques pour l'utilisation de l'injection de dépendances#🎜🎜##🎜🎜##🎜🎜#Voici quelques bonnes pratiques pour l'utilisation de l'injection de dépendances : #🎜🎜#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!