Heim >Backend-Entwicklung >PHP-Tutorial >Detaillierte Einführung in die PHP-Abhängigkeitsinjektion (mit Beispielen)

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

不言
不言nach vorne
2019-03-14 13:20:242293Durchsuche

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();

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();

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:segmentfault.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen