Maison développement back-end tutoriel php Comprendre en profondeur comment l'injection de dépendances réalise le découplage

Comprendre en profondeur comment l'injection de dépendances réalise le découplage

May 20, 2020 am 10:05 AM
ioc php

Comprendre en profondeur comment l'injection de dépendances réalise le découplage

Chapitre 1 : Xiao Ming et son téléphone portable

Il était une fois un homme nommé Xiao Ming

Xiao Ming a trois passe-temps principaux, fumer et boire... Ahem, désolé, je me suis trompé de plateau. Il devrait s'agir de parcourir Zhihu, de jouer à King Pesticide et de récupérer des enveloppes rouges WeChat

Comprendre en profondeur comment linjection de dépendances réalise le découplage

Les trois principaux passe-temps de Xiao Ming

Nous utilisons un simple pseudo-code pour créer un Un tel Xiao Ming

class Ming extends Person
{
    private $_name;
    private $_age;
    function read()
    {
        //逛知乎
    }
    function  play()
    {
        //玩农药
    }
    function  grab()
    {
        //抢红包
    }
}
Copier après la connexion

Cependant, en tant qu'être humain, Xiao Ming n'a aucun moyen de réaliser les fonctions ci-dessus par lui-même. Il doit compter sur un téléphone portable, alors il a acheté un iPhone6. Ensuite, fabriquons un iPhone6.

class iPhone6 extends Iphone
{
    function read($user="某人")
    {
        echo $user."打开了知乎然后编了一个故事 \n";
    }
    function play($user="某人")
    {
        echo $user."打开了王者农药并送起了人头 \n";
    }
    function grab($user="某人")
    {
        echo $user."开始抢红包却只抢不发 \n";
    }
}
Copier après la connexion

Xiao Ming chérit beaucoup son nouveau téléphone portable et le garde fermement dans sa main tous les jours, alors Xiao Ming devient comme ça

class Ming extends Person
{
    private $_name;
    private $_age;
    public function  __construct()
    {
        $this->_name = '小明';
        $this->_age = 26;
    }
    function read()
    {
        //……  省略若干代码
        (new iPhone6())->read($this->_name); //逛知乎
    }
    function  play()
    {
        //……  省略若干代码
        (new iPhone6())->play($this->_name);//玩农药
    }
    function  grab()
    {
        //……  省略若干代码
        (new iPhone6())->grab($this->_name);//抢红包
    }
}
Copier après la connexion

Aujourd'hui c'est samedi, Xiao Ming n'est pas obligé de le faire aller travailler, alors il s'est levé, a parcouru Zhihu, a joué à King Pesticide et a attrapé une enveloppe rouge.

$ming = new Ming();  //小明起床
$ming->read();
$ming->play();
$ming->grab();
Copier après la connexion

À ce moment, nous pouvons voir le résultat dans la ligne de commande comme suit

Xiao Ming a ouvert Zhihu et a inventé une histoire

Xiao Ming a ouvert le King Pesticide et l'a envoyé

Xiao Ming a commencé à récupérer l'enveloppe rouge mais n'a pu que la saisir sans la donner

Ce jour-là, Xiao Ming a eu une vie épanouie. Il sentait qu'il était la personne la plus heureuse. dans le monde.

Chapitre 2 : Le bonheur et la tristesse de Xiao Ming

Xiao Ming et son téléphone portable ont passé un merveilleux moment ensemble Quand il avait du temps libre, il s'est embrassé en utilisant son téléphone portable. téléphone, parcourant Zhihu, parcourant Weibo et jouant à des jeux, il sentait qu'il n'avait pas du tout besoin d'une petite amie, tant qu'il avait son téléphone portable à ses côtés, il serait satisfait.

Mais qui aurait pensé que les mises à jour du système les unes après les autres brisaient complètement son rêve. Son téléphone devenait de plus en plus lent et la durée de vie de la batterie devenait de plus en plus courte, jusqu'au jour où, dans le vent froid, son téléphone portable. je n'ai finalement pas supporté le froid et je l'ai éteint sans regarder en arrière.

Xiao Ming était très triste. Il s'est rendu compte qu'il devait changer de téléphone portable.

Afin d'obtenir une meilleure expérience utilisateur, Xiao Ming a serré les dents et a acheté un iPhone. L'un des problèmes qu'il a rencontré était qu'il était trop dépendant de l'iPhone 6 d'origine, et ils étaient profondément couplés. voulait changer de téléphone, il prendrait un couteau pour se transformer et supprimer toutes les méthodes de son corps. Tous les iphone6 ​​ont été remplacés par des iphoneX.

Long processus de transformation

Après un long processus de transformation, Xiao Ming a finalement remplacé tous les iphone6 ​​​​dans le code par iphoneX. Même si c'est très dur, Xiao Ming se sent heureux.

Xiao Ming a donc volontiers emmené son téléphone portable au travail, mais a été volé par un voleur sur le chemin du retour. En cas d'urgence, Xiao Ming n'avait d'autre choix que de réutiliser l'iPhone 6 qui venait d'être abandonné. Cependant, lorsqu'il a pensé au long processus de transformation, Xiao Ming s'est senti indiciblement lésé. Il s'est senti trop dépendant de son téléphone portable. se sentait-il si déprimé à chaque fois que quelque chose n'allait pas avec son téléphone portable ? Il doit se transformer. Il ne s'agit pas simplement de mettre la charrue avant les bœufs. Il a crié au ciel, je ne veux pas. pour contrôler mon téléphone portable.

Le Créateur dans le ciel, c'est-à-dire moi en tant que programmeur, a entendu son cri, et je lui ai dit, tu n'as plus besoin de contrôler ton téléphone, laisse-moi le gérer, donne-moi le contrôle . C’est ce qu’on appelle l’inversion du contrôle.

Chapitre 3 : La sagesse du Créateur

Xiao Ming a entendu mes paroles. Il était à la fois heureux et un peu effrayé. Il s'est agenouillé et s'est incliné plusieurs fois. pieusement. Il a dit : « Il s'avère que vous êtes le créateur légendaire, Dieu Bagmek. Je vous ai entendu dire les quatre mots « inversion de contrôle », qui consiste à vous confier le contrôle du téléphone portable de mes mains, mais c'est juste votre idée. Quelle méthode peut-on utiliser pour réaliser une inversion de contrôle et me permettre de continuer à utiliser mon téléphone portable ? "

"Ha", en tant que créateur, je suis complètement dédaigneux. Après cela, j'en ai jeté quatre. de grands mots, "Injection de dépendance !"

Ensuite, le grand moi a commencé à apporter des modifications inhumaines à Xiao Ming, comme suit

class Ming extends Person
{
    private $_name;
    private $_age;
    private $_phone; //将手机作为自己的成员变量
    public function  __construct($phone)
    {
        $this->_name = '小明';
        $this->_age = 26;
        $this->_phone = $phone;
        echo "小明起床了 \n";
    }
    function read()
    {
        //……  省略若干代码
        $this->_phone->read($this->_name); //逛知乎
    }
    function  play()
    {
        //……  省略若干代码
        $this->_phone->play($this->_name);//玩农药
    }
    function  grab()
    {
        //……  省略若干代码
        $this->_phone->grab($this->_name);//抢红包
    }
}
Copier après la connexion

Ensuite, simulons l'exécution de Xiao Ming Un jour

$phone = new IphoneX(); //创建一个iphoneX的实例
if($phone->isBroken()){//如果iphone不可用,则使用旧版手机
    $phone = new Iphone6();
}
$ming = new Ming($phone);//小明不用关心是什么手机,他只要玩就行了。
$ming->read();
$ming->play();
$ming->grab();
Copier après la connexion

Voyons d'abord si l'iPhone Le téléphone portable est injecté directement dans son corps. Il n'a pas besoin de se soucier du téléphone portable qu'il tient, il lui suffit de l'utiliser directement.

Il s'agit d'une injection de dépendance.

Chapitre 4 : Les idées de Xiao Ming

La vie de Xiao Ming a commencé à devenir plus simple et il a passé tout le temps qu'il économisait à écrire des notes dans votre cahier

Avant, j'avais un fort désir de contrôler et je comptais trop sur mon téléphone portable, ce qui rendait le couplage entre moi et mon téléphone portable trop élevé. Tant qu'il y avait un léger problème avec mon téléphone portable, je. Je devrais me transformer. C'est vraiment une perte de temps. C'est facile de se tromper. Depuis que j'ai donné le contrôle au Créateur, Il a déjà choisi un téléphone portable pour moi avant de me réveiller chaque jour. J'ai juste besoin de jouer avec comme d'habitude, sans me soucier de quel type de téléphone portable il s'agit. Même s'il y a un problème avec le téléphone portable, il peut être résolu directement par le Créateur. Il n'est pas nécessaire de le modifier moi-même. J'ai maintenant acheté sept téléphones portables et je les ai remis au Créateur. je suis si heureux!

J'ai également acquis cette idée : si l'implémentation de la fonction d'une classe A nécessite l'aide de la classe B, alors la classe B est dite être une dépendance de la classe A. Si la classe est instanciée à l'intérieur de la classe A, B , alors il y aura un couplage élevé entre les deux. Une fois qu'il y aura un problème avec la classe B, la classe A devra également être transformée. S'il existe de nombreuses situations de ce type et qu'il existe de nombreuses dépendances entre chaque classe, il y aura alors des conflits. Si tout le corps est affecté par une seule attaque, le programme sera extrêmement difficile à maintenir et des problèmes surviendront facilement. Pour résoudre ce problème, il est nécessaire d'extraire le contrôle de la classe A de la classe B et de le remettre à un tiers. L'inversion du contrôle vers un tiers est appelée inversion de contrôle (IOC Inversion Of Control). L'inversion du contrôle est une idée et un résultat possible qui peut résoudre le problème, et l'injection de dépendances (Dependency Injection) est sa méthode de mise en œuvre la plus typique. Un tiers (nous l'appelons un conteneur IOC) contrôle la dépendance et l'injecte dans la classe A via des méthodes telles que des constructeurs, des attributs ou des modèles d'usine, découplant ainsi dans une large mesure la classe A et la classe B.

Tutoriel recommandé : "Tutoriel 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 de ce site Web
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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Commandes de chat et comment les utiliser
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

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

Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 apporte plusieurs nouvelles fonctionnalités, améliorations de sécurité et de performances avec une bonne quantité de dépréciations et de suppressions de fonctionnalités. Ce guide explique comment installer PHP 8.4 ou mettre à niveau vers PHP 8.4 sur Ubuntu, Debian ou leurs dérivés. Bien qu'il soit possible de compiler PHP à partir des sources, son installation à partir d'un référentiel APT comme expliqué ci-dessous est souvent plus rapide et plus sécurisée car ces référentiels fourniront les dernières corrections de bogues et mises à jour de sécurité à l'avenir.

Comment configurer Visual Studio Code (VS Code) pour le développement PHP Comment configurer Visual Studio Code (VS Code) pour le développement PHP Dec 20, 2024 am 11:31 AM

Visual Studio Code, également connu sous le nom de VS Code, est un éditeur de code source gratuit – ou environnement de développement intégré (IDE) – disponible pour tous les principaux systèmes d'exploitation. Avec une large collection d'extensions pour de nombreux langages de programmation, VS Code peut être c

7 fonctions PHP que je regrette de ne pas connaître auparavant 7 fonctions PHP que je regrette de ne pas connaître auparavant Nov 13, 2024 am 09:42 AM

Si vous êtes un développeur PHP expérimenté, vous aurez peut-être le sentiment d'y être déjà allé et de l'avoir déjà fait. Vous avez développé un nombre important d'applications, débogué des millions de lignes de code et peaufiné de nombreux scripts pour réaliser des opérations.

Comment analysez-vous et traitez-vous HTML / XML dans PHP? Comment analysez-vous et traitez-vous HTML / XML dans PHP? Feb 07, 2025 am 11:57 AM

Ce tutoriel montre comment traiter efficacement les documents XML à l'aide de PHP. XML (Language de balisage extensible) est un langage de balisage basé sur le texte polyvalent conçu à la fois pour la lisibilité humaine et l'analyse de la machine. Il est couramment utilisé pour le stockage de données et

Expliquez les jetons Web JSON (JWT) et leur cas d'utilisation dans les API PHP. Expliquez les jetons Web JSON (JWT) et leur cas d'utilisation dans les API PHP. Apr 05, 2025 am 12:04 AM

JWT est une norme ouverte basée sur JSON, utilisée pour transmettre en toute sécurité des informations entre les parties, principalement pour l'authentification de l'identité et l'échange d'informations. 1. JWT se compose de trois parties: en-tête, charge utile et signature. 2. Le principe de travail de JWT comprend trois étapes: la génération de JWT, la vérification de la charge utile JWT et l'analyse. 3. Lorsque vous utilisez JWT pour l'authentification en PHP, JWT peut être généré et vérifié, et les informations sur le rôle et l'autorisation des utilisateurs peuvent être incluses dans l'utilisation avancée. 4. Les erreurs courantes incluent une défaillance de vérification de signature, l'expiration des jetons et la charge utile surdimensionnée. Les compétences de débogage incluent l'utilisation des outils de débogage et de l'exploitation forestière. 5. L'optimisation des performances et les meilleures pratiques incluent l'utilisation des algorithmes de signature appropriés, la définition des périodes de validité raisonnablement,

Programme PHP pour compter les voyelles dans une chaîne Programme PHP pour compter les voyelles dans une chaîne Feb 07, 2025 pm 12:12 PM

Une chaîne est une séquence de caractères, y compris des lettres, des nombres et des symboles. Ce tutoriel apprendra à calculer le nombre de voyelles dans une chaîne donnée en PHP en utilisant différentes méthodes. Les voyelles en anglais sont a, e, i, o, u, et elles peuvent être en majuscules ou en minuscules. Qu'est-ce qu'une voyelle? Les voyelles sont des caractères alphabétiques qui représentent une prononciation spécifique. Il y a cinq voyelles en anglais, y compris les majuscules et les minuscules: a, e, i, o, u Exemple 1 Entrée: String = "TutorialSpoint" Sortie: 6 expliquer Les voyelles dans la chaîne "TutorialSpoint" sont u, o, i, a, o, i. Il y a 6 yuans au total

Expliquez la liaison statique tardive en PHP (statique: :). Expliquez la liaison statique tardive en PHP (statique: :). Apr 03, 2025 am 12:04 AM

Liaison statique (statique: :) ​​implémente la liaison statique tardive (LSB) dans PHP, permettant à des classes d'appel d'être référencées dans des contextes statiques plutôt que de définir des classes. 1) Le processus d'analyse est effectué au moment de l'exécution, 2) Recherchez la classe d'appel dans la relation de succession, 3) il peut apporter des frais généraux de performance.

Quelles sont les méthodes PHP Magic (__construct, __ destruct, __ call, __get, __set, etc.) et fournir des cas d'utilisation? Quelles sont les méthodes PHP Magic (__construct, __ destruct, __ call, __get, __set, etc.) et fournir des cas d'utilisation? Apr 03, 2025 am 12:03 AM

Quelles sont les méthodes magiques de PHP? Les méthodes magiques de PHP incluent: 1. \ _ \ _ Construct, utilisé pour initialiser les objets; 2. \ _ \ _ Destruct, utilisé pour nettoyer les ressources; 3. \ _ \ _ Appel, gérer les appels de méthode inexistants; 4. \ _ \ _ GET, Implémentez l'accès à l'attribut dynamique; 5. \ _ \ _ SET, Implémentez les paramètres d'attribut dynamique. Ces méthodes sont automatiquement appelées dans certaines situations, améliorant la flexibilité et l'efficacité du code.

See all articles