Zusammenfassung von Anwendungsbeispielen verschiedener Reflexionsklassen in PHP

伊谢尔伦
Freigeben: 2023-03-12 09:24:02
Original
1224 Leute haben es durchsucht

Dieser Artikel stellt hauptsächlich die Verwendungsbeispiele von PHP Reflection (Reflection) vor. In diesem Artikel werden die Verwendungsbeispiele von ReflectionClass, ReflectionExtension, ReflectionFunction, ReflectionMethod, ReflectionObject, ReflectionParameter und anderen Klassen erläutert >PHP Reflection wird verwendet, um detaillierte Informationen über Klassen, Erweiterungen, Methoden,

Funktionen

, Objekte, Parameter und Eigenschaften zu erhalten. Die ReflectionClass-Klasse ruft klassenbezogene Informationen ab, z. B. das Abrufen von Attributen, Methoden, Dokumentationskommentaren usw.

ReflectionExtension-Klasse wird verwendet, um erweiterungsbezogene Informationen abzurufen
<?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());
Nach dem Login kopieren

Benutzer der ReflectionFunction-Klasse erhalten funktionsbezogene Informationen
$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()); //是否是临时扩展
Nach dem Login kopieren

Benutzer der ReflectionMethod-Klasse erhalten Methode -bezogene Informationen
$rf = new ReflectionFunction(&#39;array_merge&#39;);
 
foreach($rf->getParameters() as $item) {
  echo $item . PHP_EOL;
}
Nach dem Login kopieren

Die ReflectionObject-Klasse wird verwendet, um objektbezogene Informationen zu erhalten.
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());
Nach dem Login kopieren

ReflectionParameter wird verwendet, um Informationen über Funktions- oder Methodenparameter zu erhalten.
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());
Nach dem Login kopieren

ReflectionProperty Ruft Informationen über die Eigenschaften der Klasse ab.
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
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonZusammenfassung von Anwendungsbeispielen verschiedener Reflexionsklassen in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage