当前位置:首页 > PHP教程 > php高级应用 > 列表

PHP的反射动态获取类方法、属性、参数操作示例

发布:smiling 来源: PHP粉丝网  添加日期:2022-02-18 16:39:47 浏览: 评论:0 

本文实例讲述了PHP的反射动态获取类方法、属性、参数操作,分享给大家供大家参考,具体如下:

我们可以在PHP运行时,通过PHP的反射动态的获取类的方法、属性、参数等详细信息。

用途:插件的设计,文档的自动生成,扩充PHP语言。

  1. <?php 
  2. class Person { 
  3.   const weightUnit = 'kg'
  4.   const heightUnit = 'cm'
  5.   public $name = 'test'
  6.   public $age = 1; 
  7.   public function say($msg = '') { 
  8.     echo $msg
  9.   } 
  10.  
  11. $p = new Person (); 
  12. // 普通的实例化对象,调用方法 
  13. $p->say ( 'hello' ); 
  14. echo "<br/>"
  15. // 创建一个Person的反射类 
  16. $rp = new ReflectionClass ( 'Person' ); 
  17.  
  18. // 通过ReflectionClass的方法来获取类的详细信息 
  19.  
  20. // 获取常量 
  21. echo $rp->getConstant ( 'weightUnit' ); 
  22. echo "<br/>"
  23. // 获取类中已定义的常量 
  24. var_dump ( $rp->getConstants () ); 
  25.  
  26. // 获取属性,返回的是一个ReflectionProperty类 
  27. $propName = $rp->getProperty ( 'name' ); 
  28. echo $propName->getName(), ':'$propName->getValue ( new Person () ); 
  29. echo "<br/>"
  30. // 获取类中已定义的一组属性 
  31. $propArr = $rp->getProperties (); 
  32. foreach ( $propArr as $obj ) { 
  33.   echo $obj->getName (), ':'$obj->getValue ( new Person () ); 
  34. echo "<br/>"
  35. //获取方法,返回的是一个ReflectionMethod类 
  36. $sayMetd = $rp->getMethod('say'); 
  37. if($sayMetd->isPublic() && !$sayMetd->isAbstract()) { 
  38.   $sayMetd->invoke(new Person(), 'hehe'); 
  39.   $sayMetd->invokeArgs(new Person(), array('hehe')); 
  40.  
  41. //获取类中已定义的一组方法,可以过滤不需要的方法 
  42. $metds = $rp->getMethods(); 
  43.  
  44. //获取命名空间 
  45. echo $rp->getNamespaceName(); 
  46. echo "<br/>"
  47. //判断一个方法是否定义 
  48. if($rp->hasMethod('say')) { 
  49.   echo 'say has'
  50. echo "<br/>"
  51. //判断一个属性是否定义 
  52. if($rp->hasProperty('name')) { 
  53.   echo 'name has'

运行结果:

  1. hello 
  2. kg 
  3. array(2) { ["weightUnit"]=> string(2) "kg" ["heightUnit"]=> string(2) "cm" } name:test 
  4. name:testage:1 
  5. hehehehe 
  6. say has 
  7. name has

Tags: PHP反射动态

分享到: