Detaillierte Einführung in die PHP-Abhängigkeitsinjektion (mit Beispielen)

不言
Freigeben: 2023-04-05 15:50:02
nach vorne
2236 Leute haben es durchsucht

Dieser Artikel bietet Ihnen eine detaillierte Einführung in die PHP-Abhängigkeitsinjektion (mit Beispielen). Freunde in Not können darauf verweisen.

Abhängigkeitsinjektion

Traditionelles Denken

Wenn eine Anwendung eine Foo-Klasse verwendet, erstellt sie die Foo-Klasse und ruft die Methoden der Foo-Klasse auf.
Wenn in dieser Methode eine Bar-Klasse erforderlich ist, wird die Bar-Klasse erstellt und die Methode der Bar-Klasse aufgerufen.
Wenn diese Methode eine Bim-Klasse erfordert, wird die Bim-Klasse erstellt und dann andere Arbeiten ausgeführt.

/**
*  Foo
*/
class Foo 
{

    public function doSomething($value='')
    {
        # code...
        $Bar = new Bar();
        $Bar->doSomething();
        echo 'Foo doSomething','<br />' ;
    }
}

/**
*  Bar
*/
class Bar 
{
    

    public function doSomething($value='')
    {
        # code...
        $Bim = new Bim();
        $Bim->doSomething();
        echo 'Bar doSomething','<br />' ;
    }
}

/**
* Bim
*/
class Bim
{
    

    public function doSomething($value='')
    {
        # code...
        echo 'Bim doSomething','<br />'  ;
    }
}

$doSomething = new Foo();
$doSomething->doSomething();
Nach dem Login kopieren

Abhängigkeitsinjektion

Die Anwendung verwendet die Foo-Klasse, die Foo-Klasse benötigt die Bar-Klasse,
die Bar-Klasse benötigt die Bim-Klasse. Erstellen Sie dann zuerst die Bim-Klasse, erstellen Sie dann die Bar-Klasse und setzen Sie sie ein Bim Inject, erstellt die Foo-Klasse und injiziert die Bar-Klasse,
ruft dann die Foo-Methode auf, Foo ruft die Bar-Methode auf und führt dann andere Arbeiten aus.

/**
* Bim2
*/
class Bim2 
{
    
    public function doSomething($value='')
    {
        # code...
        echo 'Bim2 doSomething','<br />' ;
    }

}

/**
*  Bar2
*/
class Bar2
{

    private $bim2 ;

    public function __construct(Bim2 $bim2)
    {
        # code...
        $this->bim2 = $bim2 ;
    }

    public function doSomething($value='')
    {
        # code...
        $this->bim2->doSomething();
        echo "Bar2 doSomething",'<br />';
    }
}

/**
* Foo
*/
class Foo2
{
    
    private $bar2 ;
    public function __construct(Bar2 $bar2)
    {
        # code...
        $this->bar2 = $bar2 ;
    }

    public function doSomething($value='')
    {
        # code...
        $this->bar2->doSomething();
        echo "Foo2 doSomething",'<br />';
    }
}

$doSomething2 = new Foo2(new Bar2(new Bim2()));
$doSomething2->doSomething();
Nach dem Login kopieren

Dies ist das Inversion of Control-Muster. Die Steuerung der Abhängigkeiten erfolgt umgekehrt zum Beginn der Aufrufkette. Auf diese Weise haben Sie die vollständige Kontrolle über Abhängigkeiten und steuern das Verhalten Ihres Programms, indem Sie verschiedene injizierte Objekte anpassen.
Zum Beispiel verwendet die Foo-Klasse Memcache. Sie können stattdessen Redis verwenden, ohne den Foo-Klassencode zu ändern.
Die Idee hinter der Verwendung eines Abhängigkeitsinjektionscontainers besteht darin, dass die Anwendung, wenn sie die Foo-Klasse abrufen muss, die Foo-Klasse aus dem Container abruft, der Container die Bim-Klasse erstellt, dann die Bar-Klasse erstellt und Bim injiziert und dann erstellt die Foo-Klasse und injiziert Bar. Die Anwendung ruft die Foo-Methode auf, Foo ruft die Bar-Methode auf und führt dann andere Arbeiten aus.

Erweiterung: Der Container ist für die Instanziierung, das Einfügen von Abhängigkeiten, die Verarbeitung von Abhängigkeiten usw. verantwortlich.

Das obige ist der detaillierte Inhalt vonDetaillierte Einführung in die PHP-Abhängigkeitsinjektion (mit Beispielen). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
php
Quelle:segmentfault.com
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!