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

2021-08-19 02:28:07 字數 1870 閱讀 3211

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

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

那什麼是依賴注入?

簡單來說,就是把a類所依賴的b類c類等以屬性或者建構函式等方式注入a類而不是直接在a類中例項化。

一般寫**我們這樣寫

classemailsendbyqq 

}classuser()

}

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

classuser 

public functionregister()

}$emailsendobject

=newemailsendbyqq;

$user

=newuser(

$emailsendobject

);$user

->register();

//以屬性的方式同樣也可以實現

classemailsendby163

}classuser

}$user

=newuser;

$user

->

emailsendobject=

newemailsendby163();

$user

->register();

上面通過建構函式和屬性的方法傳遞物件的過程,就是依賴注入的體現。

「注入」就是把乙個例項傳到另乙個例項內部。 接下來繼續把上面的**優化,簡單工廠模式的體現。
//通過emailsendbyqq和emailsendby163類,我們提煉出乙個inte***ce介面,讓user類register方法依賴於inte***ce介面的物件看起來更合適

inte***ceemailsender

classemailsendbyqq

implementsemailsender

}classemailsendby163

implementsemailsender

}classuser

public functionregister()

}$user

=newuser(

newemailsendby163);

$user

->register();

這樣便實現了解耦。

依賴倒置原則(dependence inversion principle, dip),是一種軟體設計思想。傳統軟體設計中,上層**依賴於下層**,當下層出現變動時, 上層**也要相應變化,維護成本較高。而dip的核心思想是上層定義介面,下層實現這個介面, 從而使得下層依賴於上層,降低耦合度,提高整個系統的彈性。這是一種經實踐證明的有效策略。

淺嚐 依賴倒置 控制反轉 依賴注入

要想知道這三者的來歷,我們先要知道這兩個概念 1.依賴 依賴描述了兩個模型元素之間的關係,在類圖上,依賴表明客戶類的操作會呼叫伺服器類的操作 2.耦合 如果改變程式的乙個模組要求另乙個模組同時發生變化,就認為這兩個模組發生了耦合。從上面的定義我們可以看出 如果模組 a呼叫模組 b提供的方法,或訪問模...

IoC模式(依賴 依賴倒置 依賴注入 控制反轉)

依賴就是有聯絡,有地方使用到它就是有依賴它,乙個系統不可能完全避免依賴。如果你的乙個類或者模組在專案中沒有用到它,恭喜你,可以從專案中剔除它或者排除它了,因為沒有乙個地方會依賴它。下面看乙個簡單的示例 public class operationmain public class player 檔案...

依賴倒置原則 控制反轉和依賴注入

1.依賴倒置原則 1 上層模組不依賴與下層模組,而是共同依賴於抽象模組 或者介面 2 抽象的東西不能是具象,具象依賴於抽象。2.控制反轉 inversion of control 是軟體執行時的一種行為。比如 物件a依賴於物件b,但是在b並不是直接去建立a,而是從外界取得a。就是說 乙個物件並不直接...