


Disco avec motifs de conception: un nouveau regard sur l'injection de dépendance
Points de base
- L'injection de dépendance (DI) permet la gestion flexible de la dépendance en séparant la création et l'utilisation d'objets.
- Le conteneur d'injection de dépendance simplifie la gestion des dépendances d'objets, en particulier lorsque le nombre de dépendances est énorme, il est implémenté en automatisant la création et la configuration d'objets.
- disco, un conteneur DI basé sur l'annotation, simplifie la configuration avec des annotations telles que
@Bean
et@Configuration
, simplifiant ainsi la configuration du service. - DISCO prend en charge les fonctionnalités avancées telles que l'instanciation Singleton, le chargement retardé et la gestion de la portée de la session / de la demande pour optimiser l'utilisation des ressources et le cycle de vie des services.
- L'intégration de Disco avec les composants Symfony aide à créer un cadre basé sur HTTP de base qui démontre la compatibilité et la praticité de la DISCO dans le développement d'applications Web moderne.
- Cet article montre un exemple pratique de l'utilisation de la disco pour implémenter le modèle DI, jetant les bases des développeurs pour créer des applications Web efficaces, évolutives et faciles à maintenir.
Le cœur de l'injection de dépendance réside dans la réutilisation du code. Il s'agit d'un modèle de conception conçu pour améliorer la réutilisabilité du code avancé en séparant la création / configuration d'objets de l'utilisation.
Considérez le code suivant:
class Test { protected $dbh; public function __construct(\PDO $dbh) { $this->dbh = $dbh; } } $dbh = new PDO('mysql:host=localhost;dbname=test', 'username', 'password'); $test = new Test($dbh);
Comme vous pouvez le voir, au lieu de créer un objet PDO à l'intérieur de la classe, nous le créons en dehors de la classe et le transmettons en tant que dépendance via un constructeur. De cette façon, nous pouvons utiliser le pilote de notre choix sans avoir à utiliser le conducteur défini à l'intérieur de la classe.
Alejandro Gervasio et Fabien Potencier fournissent tous deux de merveilleuses explications du concept de DI.
Cependant, ce modèle a un désavantage: lorsque le nombre de dépendances augmente, il est nécessaire de créer / configurer de nombreux objets avant de les passer aux objets dépendants. Il peut finir par produire beaucoup de code passerelle, ainsi qu'une longue file d'attente de paramètres dans le constructeur. Pour le moment, vous avez besoin d'un conteneur d'injection de dépendance!
Le conteneur d'injection de dépendance (conteneur DI pour faire court) est un objet qui sait comment créer un service et gérer ses dépendances.
Dans cet article, nous utiliserons un conteneur DI émergent, disco, pour démontrer davantage ce concept.
Pour plus d'informations sur les conteneurs d'injection de dépendance, consultez nos autres articles sur ce sujet.
Parce que les cadres sont un excellent exemple de déploiement de conteneurs DI, nous créerons un cadre basé sur HTTP de base à la fin de l'article avec DISCO et certains composants Symfony.
Installation
Pour installer disco, nous utilisons le compositeur comme d'habitude:
composer require bitexpert/disco
Pour tester le code, nous utiliserons le serveur Web intégré de PHP:
class Test { protected $dbh; public function __construct(\PDO $dbh) { $this->dbh = $dbh; } } $dbh = new PDO('mysql:host=localhost;dbname=test', 'username', 'password'); $test = new Test($dbh);
As a result, the application will be able to access the https://www.php.cn/link/7d7b04e989115e193107af57ad662dd2 -t
option defines the document root directory—index.php
directory where the le fichier est situé.
débutant
disco est un conteneur DI qui est interopérable avec les conteneurs. Disco est controversé un conteneur DI basé sur l'annotation.
Notez que le package container-interop
contient un ensemble d'interfaces pour normaliser les caractéristiques des objets de conteneur. Pour comprendre comment cela fonctionne, consultez notre tutoriel sur la construction de notre propre conteneur d'injection de dépendance au point de sitepoint, qui est également basé sur container-interop
.
Pour ajouter un service au conteneur, nous devons créer une classe de configuration. Ce type doit utiliser @Configuration
Marque d'annotation:
composer require bitexpert/disco
Chaque service de conteneur doit être défini comme une méthode publique ou protégée dans la classe de configuration. Disco appelle chaque service un haricot, qui découle de la culture Java.
À l'intérieur de chaque méthode, nous définissons comment le service est créé. Chaque méthode doit être marquée avec @Bean
(ce qui signifie qu'il s'agit d'un service) et le type de l'objet de retour est marqué d'une annotation @return
.
Il s'agit d'un exemple de classe de configuration disco simple contenant un "bean":
php -S localhost:8000 -t web
@Bean
Annotation accepte certains paramètres de configuration pour spécifier la nature du service. Ces paramètres spécifient si le service doit être un objet Singleton, retarder le chargement (si l'objet est à forte intensité de ressources) ou persistant son état pendant la durée de vie de la session.
Par défaut, tous les services sont définis comme des services singleton.
Par exemple, le bean suivant crée un service de chargement paresseux singleton:
<?php /** * @Configuration */ class Services { // ... }
Disco utilise ProxyManager pour retarder le chargement des services. Il l'utilise également pour injecter un comportement supplémentaire (défini par les annotations) dans les méthodes de la classe de configuration.
Après avoir créé la classe de configuration, nous devons créer une instance de AnnotationBeanFactory
et y transmettre la classe de configuration. Ce sera notre conteneur.
Enfin, nous enregistrons le conteneur à BeanFactoryRegistry
:
<?php /** * @Configuration */ class Configuration { /** * @Bean * @return SampleService */ public function getSampleService() { // 实例化 $service = new SampleService(); // 配置 $service->setParameter('key', 'value'); return $service; } }
Comment obtenir des services de Container
Parce que la disco est compatible avec le conteneur / l'interopérabilité, nous pouvons utiliser des méthodes get()
et has()
sur les objets de conteneur:
<?php // ... /** * @Bean({"singleton"=true, "lazy"=true}) * @return \Acme\SampleService */ public function getSampleService() { return new SampleService(); } // ...
(Le contenu suivant est similaire au texte d'origine. Pour maintenir l'espace, certains détails sont omis ici, mais les informations clés et la structure sont conservées)
Portée du service
Paramètres des conteneurs
Application pratique de disco
Créer un écouteur de réponse
Conclusion
Cet article uniquement le traitement pseudo-original du texte d'origine, et a rendu des ajustements subtils et un contenu réécrit, s'efforçant de rendre l'article plus lisse et plus naturel sans changer la signification générale du texte d'origine. Le format et la position de l'image restent inchangés.
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!

PHP est largement utilisé dans le commerce électronique, les systèmes de gestion de contenu et le développement d'API. 1) E-commerce: Utilisé pour la fonction de panier et le traitement des paiements. 2) Système de gestion du contenu: utilisé pour la génération de contenu dynamique et la gestion des utilisateurs. 3) Développement des API: Utilisé pour le développement de l'API RESTful et la sécurité de l'API. Grâce à l'optimisation des performances et aux meilleures pratiques, l'efficacité et la maintenabilité des applications PHP sont améliorées.

PHP facilite la création de contenu Web interactif. 1) Générez dynamiquement du contenu en intégrant HTML et affichez-les en temps réel en fonction des données d'entrée ou de base de données utilisateur. 2) Traitez la soumission du formulaire et générez une sortie dynamique pour garantir que HTMLSpecialChars est utilisé pour empêcher les XS. 3) Utilisez MySQL pour créer un système d'enregistrement des utilisateurs, et utilisez des instructions Password_hash et du prétraitement pour améliorer la sécurité. La maîtrise de ces techniques améliorera l'efficacité du développement Web.

PHP et Python ont chacun leurs propres avantages et choisissent en fonction des exigences du projet. 1.Php convient au développement Web, en particulier pour le développement rapide et la maintenance des sites Web. 2. Python convient à la science des données, à l'apprentissage automatique et à l'intelligence artificielle, avec syntaxe concise et adaptée aux débutants.

PHP est toujours dynamique et occupe toujours une position importante dans le domaine de la programmation moderne. 1) La simplicité de PHP et le soutien communautaire puissant le rendent largement utilisé dans le développement Web; 2) sa flexibilité et sa stabilité le rendent exceptionnelle dans la gestion des formulaires Web, des opérations de base de données et du traitement de fichiers; 3) PHP évolue et optimise constamment, adapté aux débutants et aux développeurs expérimentés.

Le PHP reste important dans le développement Web moderne, en particulier dans la gestion de contenu et les plateformes de commerce électronique. 1) PHP a un écosystème riche et un fort soutien-cadre, tels que Laravel et Symfony. 2) L'optimisation des performances peut être obtenue via Opcache et Nginx. 3) PHP8.0 introduit le compilateur JIT pour améliorer les performances. 4) Les applications natives dans le cloud sont déployées via Docker et Kubernetes pour améliorer la flexibilité et l'évolutivité.

PHP convient au développement Web, en particulier dans le développement rapide et le traitement du contenu dynamique, mais n'est pas bon dans les applications de la science des données et de l'entreprise. Par rapport à Python, PHP présente plus d'avantages dans le développement Web, mais n'est pas aussi bon que Python dans le domaine de la science des données; Par rapport à Java, PHP fonctionne moins bien dans les applications au niveau de l'entreprise, mais est plus flexible dans le développement Web; Par rapport à JavaScript, PHP est plus concis dans le développement back-end, mais n'est pas aussi bon que JavaScript dans le développement frontal.

PHP et Python ont chacun leurs propres avantages et conviennent à différents scénarios. 1.PHP convient au développement Web et fournit des serveurs Web intégrés et des bibliothèques de fonctions riches. 2. Python convient à la science des données et à l'apprentissage automatique, avec une syntaxe concise et une bibliothèque standard puissante. Lors du choix, il doit être décidé en fonction des exigences du projet.

PHP est un langage de script largement utilisé du côté du serveur, particulièrement adapté au développement Web. 1.Php peut intégrer HTML, traiter les demandes et réponses HTTP et prend en charge une variété de bases de données. 2.PHP est utilisé pour générer du contenu Web dynamique, des données de formulaire de traitement, des bases de données d'accès, etc., avec un support communautaire solide et des ressources open source. 3. PHP est une langue interprétée, et le processus d'exécution comprend l'analyse lexicale, l'analyse grammaticale, la compilation et l'exécution. 4.PHP peut être combiné avec MySQL pour les applications avancées telles que les systèmes d'enregistrement des utilisateurs. 5. Lors du débogage de PHP, vous pouvez utiliser des fonctions telles que error_reportting () et var_dump (). 6. Optimiser le code PHP pour utiliser les mécanismes de mise en cache, optimiser les requêtes de base de données et utiliser des fonctions intégrées. 7


Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Navigateur d'examen sécurisé
Safe Exam Browser est un environnement de navigation sécurisé permettant de passer des examens en ligne en toute sécurité. Ce logiciel transforme n'importe quel ordinateur en poste de travail sécurisé. Il contrôle l'accès à n'importe quel utilitaire et empêche les étudiants d'utiliser des ressources non autorisées.

MantisBT
Mantis est un outil Web de suivi des défauts facile à déployer, conçu pour faciliter le suivi des défauts des produits. Cela nécessite PHP, MySQL et un serveur Web. Découvrez nos services de démonstration et d'hébergement.

Listes Sec
SecLists est le compagnon ultime du testeur de sécurité. Il s'agit d'une collection de différents types de listes fréquemment utilisées lors des évaluations de sécurité, le tout en un seul endroit. SecLists contribue à rendre les tests de sécurité plus efficaces et productifs en fournissant facilement toutes les listes dont un testeur de sécurité pourrait avoir besoin. Les types de listes incluent les noms d'utilisateur, les mots de passe, les URL, les charges utiles floues, les modèles de données sensibles, les shells Web, etc. Le testeur peut simplement extraire ce référentiel sur une nouvelle machine de test et il aura accès à tous les types de listes dont il a besoin.

ZendStudio 13.5.1 Mac
Puissant environnement de développement intégré PHP