Heim  >  Artikel  >  Backend-Entwicklung  >  PHP: Abhängigkeitsinjektion, Umkehrung der Kontrolle, Prinzip der Abhängigkeitsumkehr

PHP: Abhängigkeitsinjektion, Umkehrung der Kontrolle, Prinzip der Abhängigkeitsumkehr

不言
不言Original
2018-04-20 11:53:181881Durchsuche

Der Inhalt dieses Artikels befasst sich mit PHP: Abhängigkeitsinjektion, Umkehrung der Kontrolle und Abhängigkeitsinversionsprinzipien. Jetzt kann ich ihn mit Ihnen teilen

Beurteilen Sie den Code. Wir haben unsere eigenen Qualitätsstandards: hohe Kohäsion, geringe Kopplung. Um dieses Problem zu lösen, gibt es in PHP viele hervorragende Entwurfsmuster, wie z. B. Factory-Muster und Singleton-Muster.

Die im Code reflektierten Entwurfsmuster ähneln einer Abhängigkeitsinjektion und einer Umkehrung der Kontrolle.

<br>

Was ist also Abhängigkeitsinjektion?

Einfach ausgedrückt geht es darum, die B- und C-Klassen, von denen Klasse A abhängt, über Attribute oder Konstruktoren in Klasse A einzufügen, anstatt sie direkt in Klasse A zu instanziieren.

Im Allgemeinen schreiben wir Code wie diesen

<br>

class EmailSendByQq {    
public function send(){    
}
}
class User(){
    public function register(){       
     $email = new EmailSendByQq();       
      $email->send();    
      }
      }

Rufen Sie die Registerregistrierungsmethode der Benutzerklasse auf und instanziieren Sie die E-Mail-Klasse, um E-Mails zu senden. Sie können sehen, dass die User-Klasse von der EmailSendByQq-Klasse abhängt. Ohne sie kann die User-Klasse keine E-Mails senden und stattdessen 163 (EmailSendBy163) verwenden in jeder Klasse. Wenn wir Kontrolle verwenden, sollte es besser sein, die Entkopplung dieser beiden Klassen umzukehren

<br>

<br>
class User {    
private $_emailSendObject;    
public function __construct($emailSendObject)
    {
            $this->_emailSendObject = $emailSendObject;    
    }       
 public function register(){        
 $this->_emailSendObject->send();    
 }}
 $emailSendObject = new EmailSendByQq;$user = new User($emailSendObject);$user->register();
 //以属性的方式同样也可以实现
 class EmailSendBy163 {    
 public function send(){    
 }
 }
 class User{    
 public $emailSendObject;    
 public function register(){       
  $this->emailSendObject->send();    
  }
  }
  $user = new User;$user->emailSendObject = new EmailSendBy163();$user->register();

<br>

Das Obige erfolgt über den Konstruktor und Der Prozess der Übergabe von Objekten über Attributmethoden ist die Verkörperung der Abhängigkeitsinjektion.

“注入”就是把一个实例传到另一个实例内部。 接下来继续把上面的代码优化,简单工厂模式的体现。

//通过EmailSendByQq和EmailSendBy163类,我们提炼出一个interface接口,让User类register方法依赖于interface接口的对象看起来更合适interface EmailSender{    public function send();}class EmailSendByQq implements EmailSender{    public function send(){    }}class EmailSendBy163 implements EmailSender{    public function send()    {        // TODO: Implement send() method.    }}class User{    public $emailSenderClass;    public function __construct(EmailSender $emailSenderObject)    {        $this->emailSenderClass = $emailSenderObject;    }    public function register(){        $this->emailSenderClass->send();    }}$user = new User(new EmailSendBy163);$user->register();

Dadurch wird eine Entkopplung erreicht.

Dependence Inversion Principle (DIP) ist eine Software-Design-Idee. Beim herkömmlichen Softwaredesign hängt der Code der oberen Schicht vom Code der unteren Schicht ab. Wenn sich der Code der unteren Schicht ändert, muss sich auch der Code der oberen Schicht entsprechend ändern, was zu hohen Wartungskosten führt. Die Kernidee von DIP besteht darin, dass die obere Schicht eine Schnittstelle definiert und die untere Schicht diese Schnittstelle implementiert, wodurch die untere Schicht von der oberen Schicht abhängig wird, wodurch die Kopplung verringert und die Flexibilität des gesamten Systems verbessert wird. Dies ist eine bewährte Strategie, die funktioniert. <br>

Verwandte Empfehlungen:

Detaillierte Erläuterung der Beispiele für PHP-Injektionspunkt-Konstruktionscodes

<br>

Das obige ist der detaillierte Inhalt vonPHP: Abhängigkeitsinjektion, Umkehrung der Kontrolle, Prinzip der Abhängigkeitsumkehr. 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