1. 程式人生 > 程式設計 >PHP的反射動態獲取類方法、屬性、引數操作示例

PHP的反射動態獲取類方法、屬性、引數操作示例

本文例項講述了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程式設計有所幫助。