PHP具有完整的反射API,可以对类、接口、函数、方法和扩展进行反向工程。反射API并提供方法取出函数、类和方法中的文档注释。本文将介绍使用PHP反射API获取类信息的方法,提供完整演示代码。
PHP反射API文档地址:
http://php.net/manual/zh/class.reflectionclass.php
使用
ReflectionClass
获取类的属性,接口,方法等信息
1.获取类基本信息
$ref = new ReflectionClass($classname);
echo $ref->getName();
echo $ref->getFileName();
2.获取类属性信息
$ref = new ReflectionClass($classname);
$properties = $ref->getProperties();
foreach($properties as $property){
echo $property->getName();
3.获取类方法信息
$ref = new ReflectionClass($classname);
$methods = $ref->getMethods();
foreach($methods as $method){
echo $method->getName();
4.获取类接口信息
$ref = new ReflectionClass($classname);
$interfaces = $ref->getInterfaces();
foreach($interfaces as $interface){
echo $interface->getName();
创建IUser接口,User类,Vip类用于被读取
User.class.php
/** 用户接口 */
interface IUser{
public function add($data);
public function get($id);
/** 用户类 */
class User implements IUser{
* 用户数据
protected $user = array();
* 新增用户
* @param Array $data 用户数据
* @return Int
public function add($data){
$this->user[] = $data;
$keys = array_keys($this->user);
return end($keys);
* 读取用户数据
* @param Int $id 用户id
* @return Array
public function get($id){
if(isset($this->user[$id])){
return $this->user[$id];
}else{
return array();
/** VIP用户类 */
class Vip extends User{
* 读取vip用户数据
* @param Int $id 用户id
* @return Array
public function getvip($id){
$data = $this->get($id);
if($data){
return $this->format($data);
return $data;
* 修饰数据
* @param Array $data 用户数据
* @return Array
private function format($data){
$data['is_vip'] = 1;
return $data;
创建Ref类调用PHP反射类获取类信息
Ref.class.php
* 调用PHP反射类获取类信息
* Date: 2017-05-24
* Author: fdipzone
* Ver: 1.0
* Func
* public static setClass 设置反射类
* public static getBase 读取类基本信息
* public static getInterfaces 读取类接口
* public static getProperties 读取类属性
* public static getMethods 读取类方法
class Ref{
private static $refclass = null;
public static function setClass($classname){
self::$refclass = new ReflectionClass($classname);
public static function getBase(){
echo '<strong>BASE INFO</strong>'.PHP_EOL;
echo 'class name: '.self::$refclass->getName().PHP_EOL;
echo 'class path: '.dirname(self::$refclass->getFileName()).PHP_EOL;
echo 'class filename: '.basename(self::$refclass->getFileName()).PHP_EOL.PHP_EOL;
public static function getInterfaces(){
echo '<strong>INTERFACES INFO</strong>'.PHP_EOL;
$interfaces = self::$refclass->getInterfaces();
if($interfaces){
foreach($interfaces as $interface){
echo 'interface name: '.$interface->getName().PHP_EOL;
public static function getProperties(){
echo '<strong>PROPERTIES INFO</strong>'.PHP_EOL;
$properties = self::$refclass->getProperties();
if($properties){
foreach($properties as $property){
echo 'property name: '.$property->getName().PHP_EOL;
echo 'property modifier: '.self::getModifier($property).PHP_EOL;
echo 'property comments: '.self::formatComment($property->getDocComment()).PHP_EOL.PHP_EOL;
public static function getMethods(){
echo '<strong>METHODS INFO</strong>'.PHP_EOL;
$methods = self::$refclass->getMethods();
if($methods){
foreach($methods as $method){
echo 'method name: '.$method->getName().PHP_EOL;
echo 'method modifier: '.self::getModifier($method).PHP_EOL;
echo 'method params num: '.$method->getNumberOfParameters().PHP_EOL;
$params = $method->getParameters();
if($params){
foreach($params as $param){
echo 'param name:'.$param->getName().PHP_EOL;
echo 'method comments: '.self::formatComment($method->getDocComment()).PHP_EOL.PHP_EOL;
private static function getModifier($o){
if($o->isPublic()){
return 'public';
if($o->isProtected()){
return 'protected';
if($o->isPrivate()){
return 'private';
return '';
private static function formatComment($comment){
$doc = explode(PHP_EOL, $comment);
return isset($doc[1])? trim(str_replace('*','',$doc[1])) : '';
demo:
<?php
require 'Ref.class.php';
require 'User.class.php';
echo '<pre>';
Ref::setClass('Vip');
Ref::getBase();
Ref::getProperties();
Ref::getMethods();
Ref::getInterfaces();
echo '</pre>';
BASE INFO
class name: Vip
class path: /home/fdipzone/ref
class filename: User.class.php
PROPERTIES INFO
property name: user
property modifier: protected
property comments: 用户数据
METHODS INFO
method name: getvip
method modifier: public
method params num: 1
param name:id
method comments: 读取vip用户数据
method name: format
method modifier: private
method params num: 1
param name:data
method comments: 修饰数据
method name: add
method modifier: public
method params num: 1
param name:data
method comments: 新增用户
method name: get
method modifier: public
method params num: 1
param name:id
method comments: 读取用户数据
INTERFACES INFO
interface name: IUser
PHP具有完整的反射API,可以对类、接口、函数、方法和扩展进行反向工程。反射API并提供方法取出函数、类和方法中的文档注释。本文将介绍使用PHP反射API获取类信息的方法,提供完整演示代码。
PHP 5提供了一个完整的反射API,可以对类、接口、函数、方法和扩展进行反向工程
找到一个对象出发地和来源的一个过程,通俗来讲就是可以根据这个对象,知道它所属的类,拥有哪些方法。
PHP类
<?php
class person{
public $name;
public $age;
public $sex;
public fu...
一、什么是反射?它是指在PHP运行状态中,扩展分析PHP程序,导出或提取出关于类、方法、属性、参数等的详细信息,包括注释。这种动态获取的信息以及动态调用对象的方法的功能称为反射API。
反射是操纵面向对象范型中元模型的API,其功能十分强大,可帮助我们构建复杂,可扩展的应用。二、反射的用途
其用途如:自动加载插件,自动生成文档,甚至可用来扩充PHP语言。
http://blog.csdn