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