首頁 >後端開發 >php教程 >PHP:依賴注入,控制反轉,依賴倒置原則

PHP:依賴注入,控制反轉,依賴倒置原則

不言
不言原創
2018-04-20 11:53:181929瀏覽

這篇文章介紹的內容是關於PHP:依賴注入,控制反轉,依賴倒置原則,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下

#判斷程式碼的好壞,我們有自己的標準:高內聚,低耦合。為了解決這個問題,php中有許多優秀的設計模式,例如工廠模式,單例模式。

而在程式碼中體現出來的設計模式,就如依賴注入和控制反轉。

<br>

那什麼是依賴注入?

簡單來說,就是把A類所依賴的B類C類等以屬性或者構造函數等方式註入A類而不是直接在A類中實例化。

一般寫程式碼我們這樣寫

<br>

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

呼叫User類別的register註冊方法,實例化Email類別發送郵件。可以看到User類別依賴EmailSendByQq類,沒有它User類就發送不了郵件,但是如果我們不想用QQ郵箱轉而用163(EmailSendBy163)呢,就需要在一個個類中修改EmailSendByQq的實例化,如果使用控制反轉對這兩個類別進行解耦,應該會好一點

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

上面透過建構子和屬性的方法傳遞對象的過程,就是依賴注入的體現。

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

    

//通过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();

    

#如此可實現了解耦。

依賴倒置原則(Dependence Inversion Principle, DIP),是一種軟體設計思想。傳統軟體設計中,上層程式碼依賴下層程式碼,當下層出現變動時, 上層程式碼也要隨之變化,維護成本較高。而DIP的核心思想是上層定義接口,下層實現這個接口, 從而使得下層依賴上層,降低耦合度,提高整個系統的彈性。這是一種經實踐證明的有效策略。 <br>

相關推薦:

#php注入點建構程式碼實例詳解

<br>

#

以上是PHP:依賴注入,控制反轉,依賴倒置原則的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn