原文:详解PHP反射API
PHP中的反射API就像Java中的java.lang.reflect包一样。它由一系列可以分析属性、要领和类的内置类构成。它在某些方面和东西函数相似,好比get_class_vars(),但是越发灵活,而且可以供给更多信息。反射API也可与PHP最新的面向东西特性一起事情,如访谒控制、接口和抽象类。旧的类函数则不太容易与这些新特性一起使用。看过框架源码的伴侣应该对PHP的反射机制有必然的了解,像是依赖注入,东西池,类加载,一些设计模式等等,都用到了反射机制。
1. 反射API的部分类
类
描 述
Reflection
为类的摘要信息供给静态函数export()
ReflectionClass
类信息和工具
ReflectionMethod
类要领信息和工具
ReflectionParameter
要领参数信息
ReflectionProperty
类属性信息
ReflectionFunction
函数信息和工具
ReflectionExtension
PHP扩展信息
ReflectionException
错误类
使用反射API这些类,我们可以获得在运行时访谒东西、函数和脚本中的扩展的信息。通过这些信息我们可以用来分析类或者构建框架。
2. 获取类的信息我们在事情中使用过一些用于查抄类属性的函数,例如:get_class_methods、getProduct等。这些要领对获取详细类信息有很大的局限性。
我们可以通过反射API类:Reflection 和 ReflectionClass 供给的静态要领 export 来获取类的相关信息, export 可以供给类的几乎所有的信息,包孕属性和要领的访谒控制状态、每个要领需要的参数以及每个要领在脚本文档中的位置。这两个工具类, export 静态要领输出功效是一致的,只是使用方法差别。
首先,构建一个简单的类
1 <?php 2 3 class Student { 4 public $name; 5 protected $age; 6 private $sex; 7 8 public function __construct($name, $age, $sex) 9 { 10 $this->setName($name); 11 $this->setAge($age); 12 $this->setSex($sex); 13 } 14 15 public function setName($name) 16 { 17 $this->name = $name; 18 } 19 20 protected function setAge($age) 21 { 22 $this->age = $age; 23 } 24 25 private function setSex($sex) 26 { 27 $this->sex = $sex; 28 } 29 }
2.1 使用 ReflectionClass::export() 获取类信息ReflectionClass::export(‘Student‘);
打印功效:
Class [ class Student ] { @@ D:\wamp\www\test2.php 3-29 - Constants [0] { } - Static properties [0] { } - Static methods [0] { } - Properties [3] { Property [ public $name ] Property [ protected $age ] Property [ private $sex ] } - Methods [4] { Method [ public method __construct ] { @@ D:\wamp\www\test2.php 8 - 13 - Parameters [3] { Parameter #0 [ $name ] Parameter #1 [ $age ] Parameter #2 [ $sex ] } } Method [ public method setName ] { @@ D:\wamp\www\test2.php 15 - 18 - Parameters [1] { Parameter #0 [ $name ] } } Method [ protected method setAge ] { @@ D:\wamp\www\test2.php 20 - 23 - Parameters [1] { Parameter #0 [ $age ] } } Method [ private method setSex ] { @@ D:\wamp\www\test2.php 25 - 28 - Parameters [1] { Parameter #0 [ $sex ] } } } }
ReflectionClass::export() 输出ReflectionClass类供给了非常多的工具要领,官方手册给的列表如下: