說到這個例項,首先介紹下本人,我是乙個php程式設計師,從事drupal開發2年多,可以說從實習開始就接觸這個,至今沒有換過,drupal給我的感覺是倆字「強大」,今天寫乙個views的字段,然後需要繼承views的views_handler_field類,還要自己實現裡面的一些方法,走一些自己的配置設定,檢視這個類的時候,發現實在是太多資訊了,並且做了好些繼承,於是我就想要是能實現乙個功能,傳入乙個類名,然後就能返回類的所有資訊(包括,屬性,方法,繼承,介面,並且這些類所放置的檔案位置,以及在該檔案的多少行)在使用drupal中的dpm函式一列印(層級查詢,這是乙個外掛程式名字叫【krumo】),我賽這想法太好了啊。。。。。越想越有興趣實現他了,
接下來我就想這該怎麼實現呢,後來突然想到了,前些日子看的php模式與物件導向一書中有一章節叫反射api的,對了就是它,接下來開始coding............................
<?php
/** * use
* $pros = new reftools('calssname', true, false);
* dpm($pros->cinfo()); print_r($pros->cinfo());
*/class reftools
/*** [cinfo description]
* @return [type] [description]
*/public function cinfo()
/*** [getreflectionobj 獲取反射物件]
* @param [type] $classname [類名]
* @return [type] [物件]
*/public function getreflectionobj($classname)
/*** [getclassmethod 獲取類方法]
* @param [type] $classname [類名]
* @param boolean $isgetpar [是否繼續查詢父類]
* @return [type] [陣列]
*/public function getclassmethod($classname)
//是否獲取父類
if( $this->isgetpar )
} $arr['parent_num'] = $this->p_num;
return $arr;
} /**
* [getclassinfo 獲取類資訊]
* @param [type] $pre [反射類物件]
* @return [type] [description]
*/public function getclassinfo($pre)
/*** [getpropertiesdataa 獲取屬性資訊]
* @param [type] $properties [arr]
* @return [type] [string]
*/public function getpropertiesdata( $properties )
return $arr;
} /**
* [getmethoddata 獲取類方法資訊]
* @param reflectionmethod $method [方法物件]
* @return [type] [string]
*/public function getmethoddata( reflectionmethod $method )
if ( $method->isinternal() )
if ( $method->isabstract() )
if ( $method->ispublic() )
if ( $method->isprotected() )
if ( $method->isprivate() )
if ( $method->isstatic() )
if ( $method->isfinal() )
if ( $method->isconstructor() )
if ( $method->returnsreference() )
return $details;
} /**
* [getmethodsource 獲取方法體]
* @param reflectionmethod $method [反射方法物件]
* @return [type] [string]
*/public function getmethodsource ( reflectionmethod $method )
}
在 getreflectionobj 這個方法裡面大家可能已經注意到了,大家可是試試,有知道解決方案的交流下。。。。。
利用反射api查詢乙個類的具體資訊
講到這個例項,首先介紹下本人,我是乙個php程式猿。從事drupal開發2年多。能夠說從實習開始就接觸這個,至今沒有換過。drupal給我的感覺是倆字 強大 今天寫乙個views的字段。然後須要繼承views的views handler field類,還要自己實現裡面的一些方法,走一些自己的配置設定...
乙個高效反射類
1.專案中有需要用到反射的地方,仔細研究了下反射,其效率並不高 還好微軟提供了il的程式設計方法,自己實現了乙個高效反射類 下面舉些常用例子 我們反射出.netframework中的乙個未公開的類 sessionstateutility 並呼叫其私有方法 deserialize 注意 由於dynam...
利用反射自己寫的乙個ModelHelper類
開發中 很多人都會使用bll model這種開發,我也是,雖然現在有很多的自動生成工具,能在幾秒內生成cs的模板,但我個人還不是很喜歡,我還是喜歡自己乙個乙個去寫,這樣更能了解自己的 不過手動編寫的時候,最討厭的就是getmodel這類方法了,把datarow的資料轉換成乙個model,實在寫的我頭...