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

黄舟
Freigeben: 2023-03-14 09:54:02
Original
1411 Leute haben es durchsucht

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); 
    }
}
Nach dem Login kopieren

normalerweise mit

$db = new Mysql();
$con = $db->connect();
Nach dem Login kopieren
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;
    }
}
Nach dem Login kopieren

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()); 
    }
}
Nach dem Login kopieren

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();
Nach dem Login kopieren

$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!

Verwandte Etiketten:
Quelle:php.cn
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