php依賴注入

2021-07-07 05:21:14 字數 1195 閱讀 2329

依然是來自到喜啦的一道面試題,你知道什麼是依賴注入嗎?

依賴注入(di)的概念雖然聽起來很深奧,但是如果你用過一些新興的php框架的話,對於di一定不陌生,因為它們多多少少都用到了依賴注入來處理類與類之間的依賴關係。

<?php

class

a}

為什麼這種方案不可取呢?因為這樣的話,a與b就耦合在了一起,也就是說a類無法脫離b類工作。

第二種方案就是在a類的方法中傳入需要的b類,如下**所示:

<?php

class

a}

這種方法比第一種方案有了改進,a類不必與b類**在一起,只要傳入的類滿足a類的需求,也可以是c類,也可以是d類等等。

但是這種方案的弊端在於如果a類依賴的類較多,引數列表會很長,容易發生混亂。

第三種方案是使用set方法傳入,如下**所示:

<?php

class

a}

這種方案同樣存在和第二種方案一樣的弊端,當依賴的類增多時,我們需要些很多很多的set方法。

這時我們在想如果有乙個專門的類(或者說乙個容器)可以幫我們管理這些依賴關係就好了。

如下**來自twittee:

<?php

class

container

function

__get

($k)

}

有了container類之後我們可以怎樣管理a與b之間的依賴關係呢,用**說話吧:

<?php

class

a public

function

dosomething

()

}

再將b類注入到容器類中:

$c = new container(); $c->setb(new b());

還可以傳入乙個匿名函式,這樣b類就不會在傳入時就立即例項化,而是在真正呼叫時才完成例項化的工作:

$c = new container();

$c->setb(function

());

這裡舉的只是乙個很簡單的例子,在實際中,容器類要考慮的有很多,比如延遲載入等等。

php 依賴注入 資料庫切換 PHP依賴注入的含義

依賴注入其實本質上是指對類的依賴通過構造器完成自動注入,例如在控制器架構方法和操作方法中一旦對引數進行物件型別約束則會自動觸發依賴注入,由於訪問控制器的引數都來自於url請求,普通變數就是通過引數繫結自動獲取,物件變數則是通過依賴注入生成。控制器 class debug public functio...

go 依賴注入 哪個好 PHP的依賴注入 DI

php當中的依賴注入和控制反轉是面試中經常問到的問題。同時,很多框架中也使用到了這種設計模式,可能有很多小夥伴們對這兩個概念認識比較模糊,下面我就來給大家講講什麼是依賴注入。概念 是一種允許我們從硬編碼的依賴中解耦出來,從而在執行時或者編譯時能夠修改的軟體設計模式。說明 要想理解di 依賴注入 首先...

php 依賴注入的實現

當a類需要依賴於b類,也就是說需要在a類中例項化b類的物件來使用時候,如果b類中的功能發生改變,也會導致a類中使用b類的地方也要跟著修改,導致a類與b類高耦合。這個時候解決方式是,a類應該去依賴b類的介面,把具體的類的例項化交給外部。為了約束我們先定義乙個訊息介面 inte ce message i...