Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erläuterung des PHP-Entwurfsmusters zur Verwendung der Abhängigkeitsinjektion

Detaillierte Erläuterung des PHP-Entwurfsmusters zur Verwendung der Abhängigkeitsinjektion

黄舟
黄舟Original
2017-07-17 16:01:131414Durchsuche

Vorwort

Lassen Sie uns abschließend über dieses berühmte Designprinzip sprechen. Tatsächlich ist es einfacher als andere Designmuster.
Das Wesen der Abhängigkeitsinjektion besteht darin, die unersetzlichen Teile einer Klasse von den ersetzbaren Teilen zu trennen und sie durch Injektion zu verwenden, wodurch der Zweck der Entkopplung erreicht wird.

Hier ist ein Beispiel für einen Datenbanklink. Ich hoffe, jeder versteht, dass

eine Datenbankverbindungsklasse

class Mysql{
    private $host;
    private $port;
    private $username;
    private $password;
    private $db_name;
    public function construct(){
        $this->host = '127.0.0.1';
        $this->port = 22;
        $this->username = 'root';
        $this->password = '';
        $this->db_name = 'my_db';
    }
    public function connect(){
        return mysqli_connect($this->host,$this->username ,$this->password,$this->db_name,$this->port); 
    }
}

normalerweise mit

$db = new Mysql();
$con = $db->connect();
entworfen werden sollte

Da es sich um einen Singleton handelt, machen wir es hier nicht kompliziert.

Abhängigkeitsinjektion

Offensichtlich ist die Datenbankkonfiguration ein austauschbarer Teil, daher müssen wir sie entfernen.

class MysqlConfiguration
{
    private $host;
    private $port;
    private $username;
    private $password;
    private $db_name;
    public function construct(string $host, int $port, string $username, string $password,string $db_name)
    {
        $this->host = $host;
        $this->port = $port;
        $this->username = $username;
        $this->password = $password;
        $this->db_name = $db_name;
    }
    public function getHost(): string
    {
        return $this->host;
    }
    public function getPort(): int
    {
        return $this->port;
    }
    public function getUsername(): string
    {
        return $this->username;
    }
    public function getPassword(): string
    {
        return $this->password;
    }
    public function getDbName(): string
    {
        return $this->db_name;
    }
}

Dann sieht der nicht ersetzbare Teil so aus:

class Mysql
{
    private $configuration;
    public function construct(DatabaseConfiguration $config)
    {
        $this->configuration = $config;
    }
    public function connect(){
        return mysqli_connect($this->configuration->getHost(),$this->configuration->getUsername() ,
        $this->configuration->getPassword,$this->configuration->getDbName(),$this->configuration->getPort()); 
    }
}

Damit ist die Trennung von Konfigurationsdatei und Verbindungslogik abgeschlossen.

Verwenden Sie

$config = new MysqlConfiguration('127.0.0.1','root','','my_db',22);
$db = new Mysql($config);
$con = $db->connect();

$config, um MySQL zu injizieren, was als Abhängigkeitsinjektion bezeichnet wird.

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung des PHP-Entwurfsmusters zur Verwendung der Abhängigkeitsinjektion. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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