Home  >  Article  >  Backend Development  >  Summary of usage examples of various reflection classes in PHP

Summary of usage examples of various reflection classes in PHP

伊谢尔伦
伊谢尔伦Original
2017-07-01 10:54:071213browse

This article mainly introduces the use examples of PHP reflection (Reflection). This article explains the use examples of ReflectionClass, ReflectionExtension, ReflectionFunction, ReflectionMethod, ReflectionObject, ReflectionParameter and other classes. Friends in need can refer to the following

PHP Reflection is used to obtain detailed information about classes, extensions, methods, functions, objects, parameters, and properties.
ReflectionClass class obtains class-related information, such as obtaining attributes, methods, document comments, etc.

<?php
 
class Person {
  /**
   * For the sake of demonstration, we"re setting this private
   */
  private $_allowDynamicAttributes = false;
 
  /** type=primary_autoincrement */
  protected $id = 0;
 
  /** type=varchar length=255 null */
  protected $name;
 
  /** type=text null */
  protected $biography;
 
  public function getId()
  {
    return $this->id;
  }
  public function setId($v)
  {
    $this->id = $v;
  }
  public function getName()
  {
    return $this->name;
  }
  public function setName($v)
  {
    $this->name = $v;
  }
  public function getBiography()
  {
    return $this->biography;
  }
  public function setBiography($v)
  {
    $this->biography = $v;
  }
}
 
//导出类
ReflectionClass::export(&#39;Person&#39;);
 
$r = new ReflectionClass(&#39;Person&#39;);
 
//获取所有属性
print_r($r->getProperties());
 
/**
 * 获取指定属性
 * ReflectionProperty::IS_STATIC
 * ReflectionProperty::IS_PUBLIC
 * ReflectionProperty::IS_PROTECTED
 * ReflectionProperty::IS_PRIVATE
 */
print_r($r->getProperties(ReflectionProperty::IS_PRIVATE));
 
//获取注释
print_r($r->getProperty(&#39;id&#39;)->getDocComment());
 
//获取方法
print_r($r->getMethods());

ReflectionExtension class is used to obtain extension-related information

$re = new ReflectionExtension(&#39;Reflection&#39;);
print_r($re->getClasses()); //扩展的所有类
print_r($re->getClassNames()); //扩展所有类名
 
$dom = new ReflectionExtension(&#39;mysql&#39;);
print_r($dom->getConstants());//扩展常量
print_r($dom->getDependencies());//该扩展依赖
print_r($dom->getFunctions());//扩展方法
print_r($dom->getINIEntries());//扩展ini信息
print_r($dom->getName());//扩展名称
print_r($dom->getVersion());//扩展版本
print_r($dom->info());//扩展信息
print_r($dom->isPersistent());//是否是持久扩展
print_r($dom->isTemporary()); //是否是临时扩展

ReflectionFunction class users obtain function-related information

$rf = new ReflectionFunction(&#39;array_merge&#39;);
 
foreach($rf->getParameters() as $item) {
  echo $item . PHP_EOL;
}

ReflectionMethod class users obtain method-related information

class Person {
 
  public $name;
 
  /**
   * get name of person
   */
  public function getName()
  {
    return $this->name;
  }
  public function setName($v)
  {
    $this->name = $v;
  }
}
 
$rm = new ReflectionMethod(&#39;Person&#39;, &#39;getName&#39;);
 
print_r($rm->isPublic());
print_r($rm->getDocComment());

The ReflectionObject class is used to obtain object-related information

class Person {
 
  public $name;
 
  public function construct($name)
  {
    $this->name = $name;
  }
  
  public function getName()
  {
    return $this->name;
  }
  
  public function setName($v)
  {
    $this->name = $v;
  }
}
 
$a = new Person(&#39;a&#39;);
 
$ro = new ReflectionObject($a);
 
print_r($ro->getMethods());

ReflectionParameter Gets information about function or method parameters.

class Person {
 
  public $name;
 
  public function construct($name)
  {
    $this->name = $name;
  }
 
  public function getName()
  {
    return $this->name;
  }
 
  public function setName($v)
  {
    $this->name = $v;
  }
}
 
$p = new ReflectionParameter(array(&#39;Person&#39;, &#39;setName&#39;), 0);
 
print_r($p->getPosition()); //0
print_r($p->getName()); //v

ReflectionProperty Gets information about the properties of the class.

class Person {
 
  /** 测试 */
  public $name;
 
  public function construct($name)
  {
    $this->name = $name;
  }
 
  public function getName()
  {
    return $this->name;
  }
 
  public function setName($v)
  {
    $this->name = $v;
  }
}
 
$p = new ReflectionProperty(&#39;Person&#39;, &#39;name&#39;);
 
print_r($p->getDocComment());

The above is the detailed content of Summary of usage examples of various reflection classes in PHP. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn