Heim  >  Artikel  >  Backend-Entwicklung  >  Reflexionsklassen in PHP

Reflexionsklassen in PHP

不言
不言Original
2018-04-26 11:52:502629Durchsuche

Dieser Artikel stellt die Reflexionsklassen in PHP vor, die einen gewissen Referenzwert haben. Freunde in Not können sich auf

Verwendungsbeispiele der Reflexionsklassen ReflectionClass und ReflectionMethod beziehen





Autor: @keenleung

Dieser Artikel Original von Bitte geben Sie beim Nachdruck die Quelle des Autors an: https://www.cnblogs.com/KeenLeung/p/6041280.html


Inhaltsverzeichnis

PHP5 verfügt über eine vollständige Reflection-API und bietet die Möglichkeit, Klassen, Schnittstellen, Funktionen, Methoden und Erweiterungen zurückzuentwickeln.

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.

Wir verwenden normalerweise die ReflectionClass-Klasse und die ReflectionMethod-Klasse, zum Beispiel:

Der Code lautet wie folgt:



Reflexionsklassen in PHP

<?phpclass  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;
 }
}

Reflexionsklassen in PHP

1. Über ReflectionClass können wir die folgenden Informationen der Personenklasse erhalten:

1. Eigenschaftsnamen

3 >4. Statische Eigenschaften
5. Namespace Namespace
Ob die Person-Klasse eine bestimmte Methode hat

Als nächstes reflektieren as Übergeben Sie einfach den Klassennamen „Person“ an ReflectionClass:

代码如下:



$class = new ReflectionClass('Person'); // 建立 Person这个类的反射类  
$instance  = $class->newInstanceArgs($args); // 相当于实例化Person 类


 

1)获取属性(Properties):

 代码如下:



Reflexionsklassen in PHP

$properties = $class->getProperties();foreach ($properties as $property) { echo $property->getName() . "\n";
}// 输出:
// _allowDynamicAttributes
// id
// name
// biography

Reflexionsklassen in PHP

 

默认情况下,ReflectionClass会获取到所有的属性,private 和 protected的也可以。如果只想获取到private属性,就要额外传个参数:

代码如下:



$private_properties = $class->getProperties(ReflectionProperty::IS_PRIVATE);


 

可用参数列表:

代码如下:



ReflectionProperty::IS_STATIC
ReflectionProperty::IS_PUBLIC
ReflectionProperty::IS_PROTECTED
ReflectionProperty::IS_PRIVATE


 通过$property->getName()可以得到属性名。

 

2)获取注释:

通过getDocComment可以得到写给property的注释。

代码如下:



Reflexionsklassen in PHP

foreach ($properties as $property) { 
if ($property->isProtected()) {  
$docblock = $property->getDocComment();  
preg_match('/ type\=([a-z_]*) /', $property->getDocComment(), $matches);  echo $matches[1] . "\n";
 }
}// Output:
// primary_autoincrement
// varchar
// text

Reflexionsklassen in PHP

 

3)获取类的方法

 代码如下:


getMethods()       来获取到类的所有methods。
hasMethod(string)  是否存在某个方法
getMethod(string)  获取方法


 

 4)执行类的方法:

代码如下:



Reflexionsklassen in PHP

->getName();  = ->getmethod('getName'); ->invoke();     = ->getmethod('setName'); ->invokeArgs(, ('snsgou.com'

Reflexionsklassen in PHP

 

二、通过ReflectionMethod,我们可以得到Person类的某个方法的信息:

1.是否“public”、“protected”、“private” 、“static”类型
2.方法的参数列表
3.方法的参数个数
4.反调用类的方法

代码如下:



Reflexionsklassen in PHP

// 执行detail方法
$method = new ReflectionMethod('Person', 'test'); 

if ($method->isPublic() && !$method->isStatic()) { 
echo 'Action is right';
}echo $method->getNumberOfParameters(); // 参数个数
echo $method->getParameters(); // 参数对象数组

Reflexionsklassen in PHP

 

 

----->>>

相关推荐:

php中的时间函数

php中的文件操作

Das obige ist der detaillierte Inhalt vonReflexionsklassen in PHP. 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