php中的反射機制

2021-07-25 21:51:07 字數 2553 閱讀 8912

php 5 具有完整的反射 api,新增了對類、介面、函式、方法和擴充套件進行反向工程的能力。 此外,反射 api 提供了方法來取出函式、類和方法中的文件注釋。

請注意部分內部 api 丟失了反射擴充套件工作所需的**。 例如,乙個內建的 php 類可能丟失了反射屬性的資料。這些少數的情況被認為是錯誤,不過, 正因為如此,它們應該被發現和修復。

舉個栗子吧,我有個person類

/**

* class person

* php反射獲取類相關資訊

* @author lightway

* @version 1.2

* @since 1.0

*/class person

/*** 說出自己的名字

*/public function saymyname()

/*** 說出自己的性別

*/protected function saymy***()

/*** 說出自己的年齡

*/private function saymyage()

/*** @param $val string 需要格式化列印的資料

*/public static function pp($val)

}

傳統的方式,想窺探類的內部怎麼做呢,get_class系列函式

$person = new person('lightway','24','male');

//常規的做法

person::pp(get_class($person)); //根據物件名返回類名

person::pp(get_class_methods('person')); //根據類名返回類的方法名組成的陣列

person::pp(get_class_vars('person')); //根據類名返回類的預設屬性組成的陣列,公有屬性

person::pp(get_object_vars($person)); //根據物件名回有物件屬性組成的關聯陣列,公有屬性

var_dump($person); //直接var_dump()方式列印物件

很多方法並不能完全窺探到類的內部,get_class_vars方法和get_object_vars方法,都是只能看到公共的屬性,get_class_methods也只能看到公有的方法。

嘗試下用php的放射機制看看:

//反射做法

$reflection = new reflectionclass('person');

$properties = $reflection->getproperties(); //獲取所有類屬性

$methods = $reflection->getmethods(); //獲取所有的方法

$constants = $reflection->getconstants(); //獲取所有的常量資訊

//獲取類注釋

print_r($reflection->getdoccomment());

//輸出所有方法的注釋

foreach ($methods as $i)

//列印所有成員屬性

foreach ($properties as $v)

//列印所有方法名稱

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

//只要私有的屬性

person::pp($reflection->getproperties(reflectionproperty::is_private));

可用引數列表:

reflectionproperty::is_static

reflectionproperty::is_public

reflectionproperty::is_protected

reflectionproperty::is_private

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

不過這樣也是很麻煩的,如果我是想看整個類的內部呢,有沒有乙個可以直接列印乙個類,讓人一目了然,當然有,

//輸出整個類結構

比var_dump強太多了吧!

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...