PHP的反射動態獲取類方法、屬性、引數操作示例
阿新 • • 發佈:2020-03-06
本文例項講述了PHP的反射動態獲取類方法、屬性、引數操作。分享給大家供大家參考,具體如下:
我們可以在PHP執行時,通過PHP的反射動態的獲取類的方法、屬性、引數等詳細資訊。
用途:外掛的設計,文件的自動生成,擴充PHP語言。
<?php class Person { const weightUnit = 'kg'; const heightUnit = 'cm'; public $name = 'test'; public $age = 1; public function say($msg = '') { echo $msg; } } $p = new Person (); // 普通的例項化物件,呼叫方法 $p->say ( 'hello' ); echo "<br/>"; // 建立一個Person的反射類 $rp = new ReflectionClass ( 'Person' ); // 通過ReflectionClass的方法來獲取類的詳細資訊 // 獲取常量 echo $rp->getConstant ( 'weightUnit' ); echo "<br/>"; // 獲取類中已定義的常量 var_dump ( $rp->getConstants () ); // 獲取屬性,返回的是一個ReflectionProperty類 $propName = $rp->getProperty ( 'name' ); echo $propName->getName(),':',$propName->getValue ( new Person () ); echo "<br/>"; // 獲取類中已定義的一組屬性 $propArr = $rp->getProperties (); foreach ( $propArr as $obj ) { echo $obj->getName (),$obj->getValue ( new Person () ); } echo "<br/>"; //獲取方法,返回的是一個ReflectionMethod類 $sayMetd = $rp->getMethod('say'); if($sayMetd->isPublic() && !$sayMetd->isAbstract()) { $sayMetd->invoke(new Person(),'hehe'); $sayMetd->invokeArgs(new Person(),array('hehe')); } //獲取類中已定義的一組方法,可以過濾不需要的方法 $metds = $rp->getMethods(); //獲取名稱空間 echo $rp->getNamespaceName(); echo "<br/>"; //判斷一個方法是否定義 if($rp->hasMethod('say')) { echo 'say has'; } echo "<br/>"; //判斷一個屬性是否定義 if($rp->hasProperty('name')) { echo 'name has'; }
執行結果:
hello
kg
array(2) { ["weightUnit"]=> string(2) "kg" ["heightUnit"]=> string(2) "cm" } name:test
name:testage:1
hehehehe
say has
name has
更多關於PHP相關內容感興趣的讀者可檢視本站專題:《php面向物件程式設計入門教程》、《PHP陣列(Array)操作技巧大全》、《PHP基本語法入門教程》、《PHP運算與運算子用法總結》、《php字串(string)用法總結》、《php+mysql資料庫操作入門教程》及《php常見資料庫操作技巧彙總》
希望本文所述對大家PHP程式設計有所幫助。