Heim  >  Artikel  >  Backend-Entwicklung  >  Beispielcode für die Verwendung von PHP Reflection (Reflection).

Beispielcode für die Verwendung von PHP Reflection (Reflection).

怪我咯
怪我咯Original
2017-07-23 11:07:002024Durchsuche

Was ist Reflexion?

Es bezieht sich auf die Erweiterung der Analyse von PHP-Programmen im laufenden Zustand von PHP und das Exportieren oder Extrahieren detaillierter Informationen zu Klassen, Methoden, Eigenschaften, Parametern usw., einschließlich Kommentaren. Diese Funktion zum dynamischen Abrufen von Informationen und zum dynamischen Aufrufen von Methoden von Objekten wird als Reflexions-API bezeichnet. Reflection ist eine API zur Manipulation von Metamodellen im objektorientierten Paradigma. Sie ist sehr leistungsfähig und kann uns beim Erstellen komplexer und skalierbarer Anwendungen helfen.

Zu seinen Einsatzmöglichkeiten gehören: automatisches Laden von Plug-Ins, automatische Generierung von Dokumenten und kann sogar zur Erweiterung der PHP-Sprache verwendet werden.

Die PHP-Reflection-API besteht aus mehreren Klassen, die uns helfen, auf die Metadaten des Programms zuzugreifen oder mit zugehörigen Anmerkungen zu interagieren. Mit Hilfe der Reflexion können wir die von der Klasse implementierten Methoden abrufen, eine Instanz der Klasse erstellen (anders als beim Erstellen mit new), eine Methode aufrufen (ebenfalls anders als den regulären Aufruf), Parameter übergeben und die Statik dynamisch aufrufen Methoden der Klasse.

Reflection API ist die in PHP integrierte OOP-Technologieerweiterung, einschließlich einiger Klassen, Ausnahmen und Schnittstellen. Zusammen können sie verwendet werden, um uns bei der Analyse anderer Klassen, Schnittstellen, Methoden, Eigenschaften, Methoden und Erweiterungen zu helfen. Diese Oop-Erweiterungen werden als Reflection bezeichnet.

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 zu Klassen, Erweiterungen, Methoden, Funktionen, Objekten, Parametern und Eigenschaften zu erhalten.
Die ReflectionClass-Klasse ruft klassenbezogene Informationen ab, z. B. das Abrufen von Attributen, Methoden, Dokumentationskommentaren usw.

<?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());


Die ReflectionExtension-Klasse wird verwendet, um erweiterungsbezogene Informationen abzurufen

$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()); //是否是临时扩展


Benutzer der ReflectionFunction-Klasse erhalten funktionsbezogene Informationen

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


Benutzer der ReflectionMethod-Klasse erhalten methodenbezogene Informationen

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());

Die ReflectionObject-Klasse wird zum Abrufen objektbezogener Informationen verwendet

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 Ruft Informationen zu Funktions- oder Methodenparametern 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

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 ReflectionProperty(&#39;Person&#39;, &#39;name&#39;);
 
print_r($p->getDocComment());

Das obige ist der detaillierte Inhalt vonBeispielcode für die Verwendung von PHP Reflection (Reflection).. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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