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

2021-10-20 04:29:25 字數 2130 閱讀 8129

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

以下是詳細介紹,如何使用反射機制實現類方法的依賴注入

//建立乙個類

class

demo

//獲取名字

public

function

getname()

//設定姓名

public

function

setname

($name

)//後面會用到這個方法來依賴注入

public

function

di(inject $inject)}

// 將類名demo作為引數傳入反射類

$demo

=new

\reflectionclass

(demo:

:class);

//獲取類的例項

$instance

=$demo

->

newinstance()

;//獲取構造方法

$constructor

=$demo

->

getconstructor()

;//獲取構造方法的所有引數

$parameter

=$demo

->

getconstructor()

->

getparameters()

;// 獲取所有屬性,返回reflectionproperty的陣列

$properties

=$demo

->

getproperties()

;// 獲取name屬性reflectionproperty

$property

=$demo

->

getproperty

('name');

// 獲取所有方法

$methods

=$demo

->

getmethods()

;//獲取指定方法的所有引數

$method_parameters

=$demo

->

getmethod

('setname')-

>

getparameters()

;// 獲取類的命名空間

$namespace

=$demo

->

getnamespacename()

;// 獲取注釋文件,即定義在類之前的注釋

$comment_class

=$demo

->

getdoccomment()

;// 獲取類中getname方法的注釋文件

$comment_method

=$demo

->

getmethod

('getname')-

>

getdoccomment()

;

//新建乙個注入的類

class

inject

}//獲取demo反射例項

$demo

=new

\reflectionclass

(demo:

:class);

//獲取待注入di方法的所有引數,迴圈注入

$param

=$demo

->

getmethod

('di')-

>

getparameters()

;//獲取demo類例項

$instance

=$demo

->

newinstance

('zhangsan');

foreach

($param

as$v)}

//最後執行輸出 『注入成功』 字元

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

依賴注入又叫控制反轉,使用過框架的人應該都不陌生。很多人一看名字就覺得是非常高大上的東西,就對它望而卻步,今天抽空研究了下,解開他它的神秘面紗。廢話不多說,直接上 工具類,使用該類來實現自動依賴注入。class ioc 執行類的方法 param type classname 類名 param typ...

java通過反射機制載入類方法和例項方法

假設某乙個類的類名是a.現在我想要通過反射機制找到其中的某乙個方法functionb 並呼叫這個方法。method functionb a.class.getmethod functionb class.paramtype functionb.invoke a.class,object.args 這...

使用反射機制實現對類中私有方法的呼叫

首先先要獲取這個類的類,假設我宣告了乙個類,類名為item 宣告乙個方法物件,private method getpackagesizeinfo 通過.class獲取類的類物件 class item item.class 通過getdeclaredmethod 第乙個引數為類中想要呼叫的方法的名字 ...