Maison > Article > développement back-end > Exemple de didacticiel d'injection de dépendances PHP (DI) et d'inversion de contrôle (IoC)
Pour comprendre les deux concepts de PHP Injection de dépendances et Inversion de contrôle, vous devez comprendre les deux problématiques suivantes :
DI - Injection de dépendances
IoC - Inversion de contrôle
Je ne peux pas vivre sans toi, donc tu es ma dépendance. Pour le dire franchement :
n'est pas le mien, mais c'est ce dont j'ai besoin et sur lequel je compte. Tout ce qui doit être fourni en externe nécessite une injection de dépendances.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
class Boy {
protected $girl ;
public function __construct(Girl $girl ) {
$this ->girl = $girl ;
}
} class Girl {
...
} $boy = new Boy(); // Error; Boy must have girlfriend!
// 所以,必须要给他一个女朋友才行 $girl = new Girl();
$boy = new Boy( $girl ); // Right! So Happy!
|
D'après le code ci-dessus, nous pouvons voir que la Boy
forte dépendanceGirl
doit être injectée dans une instance de Girl
pendant la construction.
Alors pourquoi y a-t-il un concept de 依赖注入
? Quel problème 依赖注入
résout-il ?
Modifions le code ci-dessus par le code que nous avons tous écrit lorsque nous étions débutants :
1
2
3
4
5
6
7
|
class Boy {
protected $girl ;
public function __construct() {
$this ->girl = new Girl();
}
} |
Boy
class
Garçon {
Boy
protected $girl
;
Boy
public
fonction
__construct()
$this
->girl =
nouveau code> <code class="php plain">Fille();
Boy
}LoliGirl
}
Girl
LoliGirl
1
2
3
4
5
6
7
8
9
10
11
12
|
class LoliGirl {
} class Boy {
protected $girl ;
public function __construct() {
// $this->girl = new Girl(); // sorry...
$this ->girl = new LoliGirl();
}
} |
1 2
3
4
5
6
7
8
9
10
11
12
|
LoliGirl { } class Garçon { code><code class="php password">protected $girl ; public fonction __construct() // $this->girl = new Girl(); // désolé... $this ->girl = nouveau LoliGirl(); } } |
Un jour Boy
je suis tombé amoureux de sœur Yu....Boy
C'est tellement ennuyeux. . .
Vous vous sentez mal ? Chaque fois que je rencontre quelqu'un qui me traite sincèrement, je dois me torturer ainsi. . .
Boy
a dit : je veux devenir plus fort. Je ne veux pas être changé encore et encore !
D'accord, rendons Boy
un peu plus fort :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 17
18
19
20
21
22
23
24
25
|
interface Girl {
// Boy need knows that I have some abilities.
} class LoliGril implement Girl {
// I will implement Girl's abilities.
} class Vixen implement Girl {
// Vixen definitely is a girl, do not doubt it.
} class Boy {
protected $girl ;
public function __construct(Girl $girl ) {
$this ->girl = $girl ; } }
$loliGirl = new LoliGirl();
$vixen $boy = new Boy( $vixen );
|
Boy
Je suis très heureuse de pouvoir enfin vivre une vie différente sans avoir à m'ouvrir. . . Tellement heureux !
1. Injection de constructeur
1
2 3 4 5 6 7 8 <?php <🎜>class Livre { <🎜> </code > code><code class="php password">privé $db_conn ; <🎜>< div class="numéro de ligne4 index3 alt1"> <🎜> < code class="php mot-clé">public fonction __construct( $db_conn ) { <🎜> < code class="php variable">$this->db_conn = $db_conn ; }<div class="numéro de ligne8 index7 alt1"><code class="php plain">} 2. Injection de Setter
C'est pourquoi nous avons le concept d'injection de dépendances. L'injection de dépendances résout les problèmes suivants :
Les codes des deux méthodes ci-dessus sont très clairs, mais lorsque nous devons injecter de nombreuses dépendances, cela signifie ajouter beaucoup de lignes, ce qui sera comparé Ingérable. Une meilleure solution consiste à créer une classe comme conteneur pour toutes les dépendances. Dans cette classe, vous pouvez stocker, créer, obtenir et trouver les dépendances requises. Comprenons d'abord le concept d'IOC Inversion de contrôle (IOC)Inversion de contrôle est un concept de programmation orientée objet. Une conception principe qui peut être utilisé pour réduire le couplage entre codes informatiques. La méthode la plus courante est appelée Dependency Injection (Dependency Injection, DI), et l'autre s'appelle "Dependency Lookup". Par inversion de contrôle, lorsqu'un objet est créé, une entité externe qui contrôle tous les objets du système lui transmet la référence de l'objet dont elle dépend. On peut aussi dire que des dépendances sont injectées dans l'objet.
À l'heure actuelle, si vous souhaitez obtenir une instance de livre, il vous suffit d'exécuter $newone = Ioc::makebook(); Ce qui précède est une instance spécifique de conteneur. Il est préférable de ne pas écrire une méthode d'injection de dépendance spécifique, utilisez l'enregistrement dans le registre. Il est préférable de l'obtenir via get
Vous pouvez maintenant vous inscrire et injecter un
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 Article précédent:Quelles sont les fonctionnalités de PHP7Article suivant:Quelles sont les fonctionnalités de PHP7 Articles LiésVoir plus
|