Um die Konzepte von PHP Dependency Injection und Inversion of Control zu verstehen, müssen Sie die folgenden zwei Probleme verstehen:
DI— —Abhängigkeitsinjektion
IoC——Kontrollumkehr
Ich kann nicht ohne dich leben , also bist du meine Abhängigkeit. Um es ganz klar auszudrücken:
ist nicht mein eigenes, aber es ist das, was ich brauche und worauf ich mich verlasse. Alles, was extern bereitgestellt werden muss, erfordert eine Abhängigkeitsinjektion.
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!
|
Aus dem obigen Code können wir ersehen, dass während der Erstellung eine Boy
starke AbhängigkeitGirl
in eine Instanz von Girl
eingefügt werden muss.
Warum gibt es also ein Konzept von 依赖注入
? Welches Problem löst 依赖注入
?
Ändern wir den obigen Code in den Code, den wir alle als Anfänger geschrieben haben:
1
2
3
4
5
6
7
|
class Boy {
protected $girl ;
public function __construct() {
$this ->girl = new Girl();
}
} |
Boy
class
Boy {
Boy
protected $girl
;
Boy
public
function
__construct() {
$this
->girl =
new code> <code class="php plain">Girl();
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
|
} class Boy { code><code class="php keyword">protected $girl ; public function __construct() { // $this->girl = new Girl(); // sorry... $this ->girl = new LoliGirl(); } } |
Eines Tages Boy
verliebte ich mich in Schwester Yu....Boy
Es ist so nervig. . .
Fühlst du dich schlecht? Jedes Mal, wenn ich jemanden treffe, der mich aufrichtig behandelt, muss ich mich so quälen. . .
Boy
sagte: Ich möchte stärker werden. Ich möchte nicht immer wieder verändert werden!
Okay, machen wir Boy
etwas stärker:
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
Ich bin sehr froh, dass ich endlich ein anderes Leben erleben kann, ohne mich öffnen zu müssen. . . So glücklich!
1. Konstruktorinjektion
1
2 3 4 5 6 7 8 <?php <🎜>class Book { <🎜> </ code ><code class="php keyword">private $db_conn ; <🎜> <🎜> < Code class="php keyword">public function __construct( $db_conn ) { <🎜> < Code class="php variable">$this->db_conn = $db_conn ; } code ><div class="line number8 index7 alt1"><code class="php plain">} 2. Setter-Injektion
Deshalb haben wir das Konzept der Abhängigkeitsinjektion entwickelt, das die folgenden Probleme löst:
Der Code der beiden oben genannten Methoden ist sehr klar, aber wenn wir viele Abhängigkeiten einfügen müssen, müssen wir viele Zeilen hinzufügen wird verglichen Unüberschaubar. Eine bessere Lösung besteht darin, eine Klasse als Container für alle Abhängigkeiten zu erstellen. In dieser Klasse können Sie die erforderlichen Abhängigkeiten speichern, erstellen, abrufen und finden. Lassen Sie uns zunächst das Konzept von IOC Inversion Of Control (IOC) verstehen.Inversion of Control ist ein Konzept in der objektorientierten Programmierung. Ein Design Prinzip, das verwendet werden kann, um die Kopplung zwischen Computercodes zu reduzieren. Die gebräuchlichste Methode heißt Dependency Injection (Dependency Injection, DI), die andere heißt „Dependency Lookup“. Durch die Umkehrung der Kontrolle übergibt eine externe Entität, die alle Objekte im System steuert, bei der Erstellung eines Objekts die Referenz des Objekts, von dem sie abhängt, an dieses. Man kann auch sagen, dass Abhängigkeiten in das Objekt eingefügt werden.
Wenn Sie zu diesem Zeitpunkt eine Buchinstanz erhalten möchten, müssen Sie nur $newone = Ioc::makebook(); ausführen. Das Obige ist eine spezifische Instanz von Container. Um eine bestimmte Abhängigkeitsinjektionsmethode zu schreiben, ist es besser, die Registrierungsregistrierung zu verwenden 🎜> 34
Sie können sich jetzt registrieren und einen
Das obige ist der detaillierte Inhalt vonBeispiel-Tutorial zu PHP Dependency Injection (DI) und Inversion of Control (IoC).. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!
Vorheriger Artikel:Was sind die Funktionen in PHP7?
Nächster Artikel:Vorläufiges Verständnis von PHP – Kapselung, Vererbung, polymorphe Funktionen
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Aktuelle Ausgaben
Bei der Verwendung von opentbs zum Generieren von ODT-Dateien sind Probleme aufgetreten: Werte desselben Schlüssels werden in derselben Zeile statt in separaten Spalten angezeigt.
Ich verwende eine Bibliothek namens OpenTbs, um ODT mit PHP zu erstellen. Ich verwende sie...
Aus 2024-04-06 20:18:18
0
1
483
verwandte Themen
Mehr>
Beliebte Empfehlungen
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
|