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

PHP 反射(Reflection)使用实例

发布:smiling 来源: PHP粉丝网  添加日期:2021-05-26 15:51:38 浏览: 评论:0 

这篇文章主要介绍了PHP 反射(Reflection)使用实例,本文讲解了ReflectionClass、ReflectionExtension、 ReflectionFunction、ReflectionMethod、ReflectionObject、ReflectionParameter等类的使用实例,需要的朋友可以参考下

PHP Reflection是用于获取类、扩展、方法、函数、对象、参数、属性的详细信息。

ReflectionClass类获取类相关信息,如获取属性、方法、文档注释等。

  1. <?php 
  2.    
  3. class Person { 
  4.   /** 
  5.    * For the sake of demonstration, we"re setting this private 
  6.    */ 
  7.   private $_allowDynamicAttributes = false; 
  8.    
  9.   /** type=primary_autoincrement */ 
  10.   protected $id = 0; 
  11.    
  12.   /** type=varchar length=255 null */ 
  13.   protected $name
  14.    
  15.   /** type=text null */ 
  16.   protected $biography
  17.    
  18.   public function getId() 
  19.   { 
  20.     return $this->id; 
  21.   } 
  22.   public function setId($v
  23.   { 
  24.     $this->id = $v
  25.   } 
  26.   public function getName() 
  27.   { 
  28.     return $this->name; 
  29.   } 
  30.   public function setName($v
  31.   { 
  32.     $this->name = $v
  33.   } 
  34.   public function getBiography() 
  35.   { 
  36.     return $this->biography; 
  37.   } 
  38.   public function setBiography($v
  39.   { 
  40.     $this->biography = $v
  41.   } 
  42.    
  43. //导出类 
  44. ReflectionClass::export('Person'); 
  45.    
  46. $r = new ReflectionClass('Person'); 
  47.    
  48. //获取所有属性 
  49. print_r($r->getProperties()); 
  50.    
  51. /** 
  52.  * 获取指定属性 
  53.  * ReflectionProperty::IS_STATIC 
  54.  * ReflectionProperty::IS_PUBLIC 
  55.  * ReflectionProperty::IS_PROTECTED 
  56.  * ReflectionProperty::IS_PRIVATE 
  57.  */ 
  58. print_r($r->getProperties(ReflectionProperty::IS_PRIVATE)); 
  59.    
  60. //获取注释 
  61. print_r($r->getProperty('id')->getDocComment()); 
  62.    
  63. //获取方法 
  64. print_r($r->getMethods()); 

ReflectionExtension 类用于获取扩展相关信息

  1. $re = new ReflectionExtension('Reflection'); 
  2. print_r($re->getClasses()); //扩展的所有类 
  3. print_r($re->getClassNames()); //扩展所有类名 
  4.    
  5. $dom = new ReflectionExtension('mysql'); 
  6. print_r($dom->getConstants());//扩展常量 
  7. print_r($dom->getDependencies());//该扩展依赖 
  8. print_r($dom->getFunctions());//扩展方法 
  9. print_r($dom->getINIEntries());//扩展ini信息 
  10. print_r($dom->getName());//扩展名称 
  11. print_r($dom->getVersion());//扩展版本 
  12. print_r($dom->info());//扩展信息 
  13. print_r($dom->isPersistent());//是否是持久扩展 
  14. print_r($dom->isTemporary()); //是否是临时扩展 

ReflectionFunction类 用户获取函数相关信息

  1. $rf = new ReflectionFunction('array_merge'); 
  2.    
  3. foreach($rf->getParameters() as $item) { 
  4.   echo $item . PHP_EOL; 

ReflectionMethod类用户获取方法相关信息

  1. class Person { 
  2.    
  3.   public $name
  4.    
  5.   /** 
  6.    * get name of person 
  7.    */ 
  8.   public function getName() 
  9.   { 
  10.     return $this->name; 
  11.   } 
  12.   public function setName($v
  13.   { 
  14.     $this->name = $v
  15.   } 
  16.    
  17. $rm = new ReflectionMethod('Person''getName'); 
  18.    
  19. print_r($rm->isPublic()); 
  20. print_r($rm->getDocComment()); 

ReflectionObject 类 用于获取对象相关信息

  1. class Person { 
  2.    
  3.   public $name
  4.    
  5.   public function __construct($name
  6.   { 
  7.     $this->name = $name
  8.   } 
  9.     
  10.   public function getName() 
  11.   { 
  12.     return $this->name; 
  13.   } 
  14.     
  15.   public function setName($v
  16.   { 
  17.     $this->name = $v
  18.   } 
  19.    
  20. $a = new Person('a'); 
  21.    
  22. $ro = new ReflectionObject($a); 
  23.    
  24. print_r($ro->getMethods()); 

ReflectionParameter 获取函数或方法参数的相关信息。

  1. class Person { 
  2.    
  3.   public $name
  4.    
  5.   public function __construct($name
  6.   { 
  7.     $this->name = $name
  8.   } 
  9.    
  10.   public function getName() 
  11.   { 
  12.     return $this->name; 
  13.   } 
  14.    
  15.   public function setName($v
  16.   { 
  17.     $this->name = $v
  18.   } 
  19.    
  20. $p = new ReflectionParameter(array('Person''setName'), 0); 
  21.    
  22. print_r($p->getPosition()); //0 
  23. print_r($p->getName()); //v 

ReflectionProperty 获取类的属性的相关信息。

  1. class Person { 
  2.    
  3.   /** 测试 */ 
  4.   public $name
  5.    
  6.   public function __construct($name
  7.   { 
  8.     $this->name = $name
  9.   } 
  10.    
  11.   public function getName() 
  12.   { 
  13.     return $this->name; 
  14.   } 
  15.    
  16.   public function setName($v
  17.   { 
  18.     $this->name = $v
  19.   } 
  20.    
  21. $p = new ReflectionProperty('Person''name'); 
  22.    
  23. print_r($p->getDocComment());

Tags: PHP反射 Reflection

分享到: