PHP的反射機制

2021-06-16 15:01:11 字數 2542 閱讀 8347

php5新增了一項新的功能:reflection。這個功能使得phper可以reverse-engineer class, inte***ce,function,method and extension。通過php**,就可以得到某object的所有資訊,並且可以和它互動。

反射是什麼?

它是指在php執行狀態中,擴充套件分析php程式,匯出或提取出關於類、方法、屬性、引數等的詳細資訊,包括注釋。這種動態獲取的資訊以及動態呼叫物件的方法的功能稱為反射api。反射是操縱物件導向范型中元模型的api,其功能十分強大,可幫助我們構建複雜,可擴充套件的應用。

其用途如:自動載入外掛程式,自動生成文件,甚至可用來擴充php語言。

php反射api由若干類組成,可幫助我們用來訪問程式的元資料或者同相關的注釋互動。借助反射我們可以獲取諸如類實現了那些方法,建立乙個類的例項(不同於用new建立),呼叫乙個方法(也不同於常規呼叫),傳遞引數,動態呼叫類的靜態方法。

反射api是php內建的oop技術擴充套件,包括一些類,異常和介面,綜合使用他們可用來幫助我們分析其它類,介面,方法,屬性,方法和擴充套件。這些oop擴充套件被稱為反射。

通過reflectionclass,我們可以得到person類的以下資訊:

1)常量 contants

2)屬性 property names

3)方法 method names靜態

4)屬性 static properties

5)命名空間 namespace

6)person類是否為final或者abstract

class

person   

public

function

setid(

$v)  

public

function

getname()  

public

function

setname(

$v)  

public

function

getbiography()  

public

function

setbiography(

$v)  

}  接下來反射它,只要把類名"person"傳遞給reflectionclass就可以了:

$class

= new

reflectionclass(

'person'

);//建立 person這個類的反射類

$instance

= $class

->newinstanceargs(

$args

);//相當於例項化person 類

$properties

= $class

->getproperties();  

foreach

($properties

as$property

)   

// 輸出:

// _allowdynamicattributes

// id

// name

// biography

預設情況下,reflectionclass會獲取到所有的屬性,private 和 protected的也可以。如果只想獲取到private屬性,就要額外傳個引數:

$private_properties = $class->getproperties(reflectionproperty::is_private);

可用引數列表:

reflectionproperty::is_static

reflectionproperty::is_public

reflectionproperty::is_protected

reflectionproperty::is_private

如果要同時獲取public 和private 屬性,就這樣寫:reflectionproperty::is_public | reflectionproperty::is_protected。

通過$property->getname()可以得到屬性名。

通過getdoccomment可以得到寫給property的注釋。

foreach

($properties

as$property

)   

}  // output:

// primary_autoincrement

// varchar

// text

獲取方法(methods):通過getmethods() 來獲取到類的所有methods。

$instance

->getbiography(); 

//執行person 裡的方法getbiography

//或者:

$ec=

$class

->getmethod(

'getname'

);  

//獲取person 類中的getname方法

$ec->invoke(

$instance

);       

//執行getname 方法

php反射機制

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

php反射機制

php5新增了一項新的功能 reflection,這個功能使得phper可以reverse engineer class,inte ce,function,method and extension,通過php 就可以得到某object的所有資訊,並且可以和它互動。反射是什麼?它是指在php執行狀態中...

PHP反射機制

reflectionclass類 class a public function publicfunction private function privatefunction protected function protectedfunction test方法 public function t...