PHP控制反轉與依賴注入的實作介紹

WBOY
發布: 2023-03-16 19:52:02
轉載
1236 人瀏覽過

(推薦教學:PHP影片教學

控制反轉

控制反轉是一種思想,是一種設計模式,這種設計模式能夠降低耦合性。

例如

<?php
class A{
    public function getClassName(){
        echo &#39;我是class A&#39;;
    }
}
class B{
    public $test;
    public function __construct()
    {
        $this->test = new A(); 
        //在类的内部获取依赖的对象。 
        //把依赖的对象写死在 Class B 中,由 Class B 选择依赖的对象,这叫做控制正转。
    }
}
$b = new B();
$b->test->getClassName();
登入後複製

//輸出我是class A

class B 的建構方法依賴class A,如果把依賴的類別( class A )寫死在class B 的建構方法中,這種寫法耦合性非常高,

例如

如果class A 改名了,我們還要修改class B 的程式碼。

如果class B 不需要 class A 需要 class C ,我們還要修改 class B 的程式碼。

為了解決這個問題,我們可以用控制來反轉這種設計模式。

<?php
class A{
    public function getClassName(){
        echo &#39;我是class A&#39;;
    }
}
class B{
    public $test;
    public function __construct($obj)
    {
        $this->test = $obj;
        //不在类的内部写死依赖的对象,而是通过外部以参数的形式传入依赖的对象,这叫控制反转。
    }
}
$b = new B (new A()); //注入 class A 的实例
$b->test->getClassName();
登入後複製

//輸出 我是class A

這樣修改程式碼後,上面的兩個問題也得到更好的解決。

如果 class A 改名了,我們不需要修改 class B 的程式碼,只需要修改傳入 class B 建構方法的參數。

如果class B 不需要 class A 需要 class C ,我們不需要修改 class B 的程式碼,只需要修改傳入 class B 建構方法的參數。

不把依賴的類別( class A )寫死在class B 的建構方法中,而是在實例化Class B 時把依賴的類別(class A)以參數的形式從外部傳入class B 的建構方法中,這樣在我們不需要class A 的時候只需修改傳入class B 的建構方法的參數即可,無需修改class B 的程式碼,這樣就大大降低耦合性了。

其實講人話就一句話,不要在方法中實例化類,而是透過向方法傳參的方式把物件傳參方法中。

至此,class B 從先前的主動選擇依賴轉變為被動從外部接收依賴,依賴物件的獲取方式被反轉,這就是控制反轉。

依賴注入

依賴注入就把目前方法需要(依賴)的物件以傳參的方式傳(註)入到目前方法中。

依賴注入在上面的程式碼已經出現過了

$b = new B (new A()); 
// class B 的构造方法需要一个对象
//注入 class A 的实例
登入後複製

控制反轉與依賴注入的關係可以用一句話來總結,可以用依賴注入實現控制反轉。

(推薦教學:PHP影片教學

以上是PHP控制反轉與依賴注入的實作介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
php
來源:jb51.net
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板