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下mysql数据库操作类(改自discuz)
Jul 03 PHP
上传文件先创建目录 再上传到目录里面去
Dec 29 PHP
PHP开发中常用的字符串操作函数
Feb 08 PHP
apache+php完美解决301重定向的两种方法
Jun 08 PHP
php URL验证正则表达式
Jul 19 PHP
让ThinkPHP支持大小写url地址访问的方法
Oct 31 PHP
php通过array_push()函数添加多个变量到数组末尾的方法
Mar 18 PHP
PHP实现图片自动清理的方法
Jul 08 PHP
Zend Framework框架Smarty扩展实现方法
Mar 22 PHP
PHP简单数据库操作类实例【支持增删改查及链式操作】
Oct 10 PHP
php实现微信企业号支付个人的方法详解
Jul 26 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
MayFish PHP的MVC架构的开发框架
2009/08/13 PHP
基于php下载文件的详解
2013/06/02 PHP
ecshop后台编辑器替换成ueditor编辑器
2015/03/03 PHP
PHP面向对象程序设计之命名空间与自动加载类详解
2016/12/02 PHP
PHP生成图片缩略图类示例
2017/01/12 PHP
线路分流自动跳转代码;希望对大家有用!
2006/12/02 Javascript
jQuery实用基础超详细介绍
2013/04/11 Javascript
JavaScript中检查对象property的存在性方法介绍
2014/12/30 Javascript
JavaScript实现按照指定长度为数字前面补零输出的方法
2015/03/19 Javascript
JS短信验证码倒计时功能的实现(没有验证码,只有倒计时)
2016/10/27 Javascript
easyui-combobox 实现简单的自动补全功能示例
2016/11/08 Javascript
js字符串操作总结(必看篇)
2016/11/22 Javascript
jQuery Validate设置onkeyup验证的实例代码
2016/12/09 Javascript
VueJs单页应用实现微信网页授权及微信分享功能示例
2017/07/26 Javascript
在vue中实现简单页面逆传值的方法
2017/11/27 Javascript
浅谈Node.js 子进程与应用场景
2018/01/24 Javascript
浅谈webpack4.x 入门(一篇足矣)
2018/09/05 Javascript
vue项目中使用AES实现密码加密解密(ECB和CBC两种模式)
2019/08/12 Javascript
js中比较两个对象是否相同的方法示例
2019/09/02 Javascript
详解Vue的组件中data选项为什么必须是函数
2020/08/17 Javascript
Python的Django框架中使用SQLAlchemy操作数据库的教程
2016/06/02 Python
Python 实现毫秒级淘宝抢购脚本的示例代码
2019/09/16 Python
python安装本地whl的实例步骤
2019/10/12 Python
django从后台返回html代码的实例
2020/03/11 Python
python安装读取grib库总结(推荐)
2020/06/24 Python
Python利用matplotlib绘制散点图的新手教程
2020/11/05 Python
全球度假村:Club Med
2017/11/27 全球购物
Bogner美国官网:滑雪服中的”Dior”
2018/01/30 全球购物
意大利在线药房:shop-farmacia.it
2019/03/12 全球购物
全民健身日活动方案
2014/01/29 职场文书
实习会计求职自荐信范文
2014/03/10 职场文书
交通安全标语
2014/06/06 职场文书
初中教师个人总结
2015/02/10 职场文书
vue+elementui 实现新增和修改共用一个弹框的完整代码
2021/06/08 Vue.js
Python爬取用户观影数据并分析用户与电影之间的隐藏信息!
2021/06/29 Python
详解Python+OpenCV进行基础的图像操作
2022/02/15 Python