PHP基於反射機制實現自動依賴注入的方法詳解

2022-09-28 03:36:08 字數 1914 閱讀 6842

依賴注入又叫控制反轉,使用過框架的人應該都不陌生。很多人一看名字就覺得是非常高大上的東西,就對它望而卻步,今天抽空研究了下,解開他它的神秘面紗。廢話不多說,直接上**;

/**** 工具類,使用該類來實現自動依賴注入。**/

class ioc

/*** 執行類的方法

* @param [type] $classname [類名]

* @param [type] $methodname [方法名稱]

* @param [type] $params [額外的引數]

* @return [type] [description]

*/public static function make($classname, $methodname, $params = ) (...array_merge($paramarr, $params));

} /**

* 獲得類的方法引數,只獲得有型別的引數

* @param [type] $classname [description]

* @param [type] $methodsname [description]

* @return [type] [description]

*/protected static function getmethodparams($classname, $methodsname = '__construc程式設計客棧t') }}

}return $paramarr;

}}上面的**使用php的反射函式,建立了乙個容器類,使用該類來實現其他類的依賴注入功能。上面的依賴注入分為兩種,一種是建構函式的依賴注入,一種是方法的依賴注入。 我們使用下面三個類來做下測試。

class a

public function aa()

public function aac()

}class b

/*** [測試方法呼叫依賴注入]

* @param c $c [依賴注入c]

* @param string $b [這個是自己手動填寫的引數]

* @return [type] [description]

*/public function b程式設計客棧b(c $c, $b)

/*** 驗證依賴注入是否成功

* @return [type] [description]

*/public function bbb()

}class c

}測試建構函式的依賴注入

// 使用ioc來建立b類的例項,b的建構函式依賴a類,a的建構函式依賴c類。

$bobj = ioc::getinstance('b');

$bobj->bbb(); // 輸出:this is c->cc , 說明依賴注入成功。

// 列印$bobj

var_dump($bobj);

// 列印結果,可以看出b中有a例項,a中有c例項,說明依賴注入成功。

object(b)#3 (1)

}}測試方法依賴注入

ioc::make('b', 'bb', ['this is param b']);

// 輸出結果,可以看出依賴注入成功。

this is c->cc

params:this is param b

從上面兩個例子可以看出我們建立物件或者呼叫方法時,根本就不用知道該類或該方法g**homy依賴了那個類。使用反射機制可以輕鬆的為我們自動注入所需要的類。

總結好了,看到上面的**是不是覺得很簡單,其實只要熟悉php的反射機制,依賴注入並不難實現,上面的**為了方便理解,所以寫的簡單除暴,在實際的專案中肯定不會這麼簡單,比如:會對注入的類和引數進行配置,比如會快取例項化過的類,下次需要該類的例項時,可以直接使用,而不用在重新初始化,等等。不過相信原理了解了,其他的可以隨著專案的需求自己去完善。

PHP利用反射實現依賴注入

本文參考部落格 非常感謝原博主.為了加深理解,做了部分修改,增加了適當注釋.前一篇簡單理解了php依賴注入,在實際開發過程中,我們並不知道依賴的類將來會擴充套件成什麼樣子,因此我們需要在實現依賴注入的時候,通過容器利用php反射類去實現.這裡的容器其實就是乙個能通過反射類實現依賴注入,並且最終返回我...

php反射機制理解,並實現類方法依賴注入和控制反轉

php自5.0版本以後新增了反射機制,它提供了一套強大的反射api,允許你在php執行環境中,訪問和使用類 方法 屬性 引數和注釋等,其功能十分強大,經常用於高擴充套件的php框架,自動載入外掛程式,自動生成文件,甚至可以用來擴充套件php語言。由於它是php內建的oop擴充套件,為語言本身自帶的特...

php反射機制

php5 具有完整的反射api,新增對類 介面 函式 方法和擴充套件進行反向工程的能力。反射是什麼?它是指在php執行狀態中,擴充套件分析php程式,匯出或提取出關於類 方法 屬性 引數等的詳細資訊,包括注釋。這種動態獲取的資訊以及動態呼叫物件的方法的功能稱為反射api。反射是操縱物件導向范型中元模...