变量是否可以按引用传递

时间:2021-11-28 06:54:20

原文:详解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类供给了非常多的工具要领,官方手册给的列表如下: