PHP 反射(Reflection)使用实例


Posted in PHP onMay 12, 2015

PHP Reflection是用于获取类、扩展、方法、函数、对象、参数、属性的详细信息。
ReflectionClass类获取类相关信息,如获取属性、方法、文档注释等。

<?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('Person');
 
$r = new ReflectionClass('Person');
 
//获取所有属性
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('id')->getDocComment());
 
//获取方法
print_r($r->getMethods());

ReflectionExtension 类用于获取扩展相关信息

$re = new ReflectionExtension('Reflection');
print_r($re->getClasses()); //扩展的所有类
print_r($re->getClassNames()); //扩展所有类名
 
$dom = new ReflectionExtension('mysql');
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()); //是否是临时扩展

 ReflectionFunction类 用户获取函数相关信息

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

ReflectionMethod类用户获取方法相关信息

class Person {
 
  public $name;
 
  /**
   * get name of person
   */
  public function getName()
  {
    return $this->name;
  }
  public function setName($v)
  {
    $this->name = $v;
  }
}
 
$rm = new ReflectionMethod('Person', 'getName');
 
print_r($rm->isPublic());
print_r($rm->getDocComment());

ReflectionObject 类 用于获取对象相关信息

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('a');
 
$ro = new ReflectionObject($a);
 
print_r($ro->getMethods());

ReflectionParameter 获取函数或方法参数的相关信息。

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('Person', 'setName'), 0);
 
print_r($p->getPosition()); //0
print_r($p->getName()); //v

ReflectionProperty 获取类的属性的相关信息。

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('Person', 'name');
 
print_r($p->getDocComment());
PHP 相关文章推荐
PHP iconv 函数转gb2312的bug解决方法
Oct 11 PHP
深入php define()函数以及defined()函数的用法详解
Jun 05 PHP
关于更改Zend Studio/Eclipse代码风格主题的介绍
Jun 23 PHP
PHP 输出URL的快捷方式示例代码
Sep 22 PHP
淘宝ip地址查询类分享(利用淘宝ip库)
Jan 07 PHP
php检测图片主要颜色的方法
Jul 01 PHP
php命令行(cli)模式下报require 加载路径错误的解决方法
Nov 23 PHP
PHP命名空间namespace用法实例分析
Sep 27 PHP
PHP getDocNamespaces()函数讲解
Feb 03 PHP
浅析PHP 中move_uploaded_file 上传中文文件名失败
Apr 17 PHP
PHP中16个高危函数整理
Sep 19 PHP
PHP检查文件是否存在,不存在自动创建及读取文件内容操作示例
Jan 23 PHP
PHP Reflection API详解
May 12 #PHP
php通过curl模拟登陆DZ论坛
May 11 #PHP
PHP中的魔术方法总结和使用实例
May 11 #PHP
php基于curl扩展制作跨平台的restfule 接口
May 11 #PHP
PHP SPL标准库中的常用函数介绍
May 11 #PHP
PHP中的类型约束介绍
May 11 #PHP
PHP SPL标准库之接口(Interface)详解
May 11 #PHP
You might like
PHP脚本的10个技巧(2)
2006/10/09 PHP
php和数据库结合的一个简单的web实例 代码分析 (php初学者)
2011/07/28 PHP
php各种编码集详解和以及在什么情况下进行使用
2011/09/11 PHP
一漂亮的PHP图片验证码实例
2014/03/21 PHP
PHP+Mysql+Ajax+JS实现省市区三级联动
2014/05/23 PHP
神盾加密解密教程(二)PHP 神盾解密
2014/06/08 PHP
Laravel5.5 数据库迁移:创建表与修改表示例
2019/10/23 PHP
php设计模式之策略模式实例分析【星际争霸游戏案例】
2020/03/26 PHP
Javascript优化技巧(文件瘦身篇)
2008/01/28 Javascript
JavaScript 滚轮事件使用说明
2010/03/07 Javascript
javascript关于open.window子页面执行完成后刷新父页面的问题分析
2015/04/27 Javascript
js贪吃蛇游戏实现思路和源码
2016/04/14 Javascript
Angular2使用Augury来调试Angular2程序
2017/05/21 Javascript
Node.js+jade+mongodb+mongoose实现爬虫分离入库与生成静态文件的方法
2017/09/20 Javascript
利用pm2部署多个node.js项目的配置教程
2017/10/22 Javascript
vue组件生命周期详解
2017/11/07 Javascript
vue组件之间通信实例总结(点赞功能)
2018/12/05 Javascript
简单了解vue中父子组件如何相互传递值(基础向)
2019/07/12 Javascript
Vue使用路由钩子拦截器beforeEach和afterEach监听路由
2020/11/16 Javascript
Windows下PyMongo下载及安装教程
2015/04/27 Python
python+selenium+autoit实现文件上传功能
2017/08/23 Python
TensorFlow入门使用 tf.train.Saver()保存模型
2018/04/24 Python
python实现对指定输入的字符串逆序输出的6种方法
2018/04/26 Python
Pycharm 2019 破解激活方法图文详解
2019/10/11 Python
Python爬虫使用浏览器cookies:browsercookie过程解析
2019/10/22 Python
tensorflow tf.train.batch之数据批量读取方式
2020/01/20 Python
python3爬虫GIL修改多线程实例讲解
2020/11/24 Python
漫威玩具服装及周边商品官方购物网站:Marvel Shop
2019/05/11 全球购物
DC Shoes俄罗斯官网:美国滑板鞋和服饰品牌
2020/08/19 全球购物
实习销售业务员自我鉴定
2013/09/21 职场文书
祖国在我心中演讲稿600字
2014/05/04 职场文书
化工专业求职信
2014/07/01 职场文书
学校消防安全责任书
2014/07/23 职场文书
业绩倒数第一的检讨书
2014/09/24 职场文书
龙门石窟导游词
2015/02/02 职场文书
2016年员工年度考核评语
2015/12/02 职场文书