PHP反射类ReflectionClass和ReflectionObject的使用方法


Posted in PHP onNovember 13, 2013

PHP中的扩展反射类,该扩展用来分析php程序,导出或提取出关于类、方法、属性、参数等的详细信息,包括注释。
看一个这样的问题,php类的成员变量没有在类中声明,而是在函数中声明,有什么不同?

class test{
    private $name;
    private $sex;
    function __construct(){
        $this->aaa='aaa';
    }
}$test=new test();
$reflect=new ReflectionClass($test);
$pro=$reflect->getDefaultProperties();
print_r($pro);//打印结果:Array ( [name] => [sex] => )
echo $test->aaa;//打印结果:aaa

在这个test类中,声明了两个成员变量$name和$sex,但是在构造函数中,又声明了一个变量$aaa,初始化类,使用反射类打印默认成员属性只有声明的两个成员变量属性,但是打印类的$aaa变量发现还是可以输出结果。
请问类的成员变量不用声明,在函数中声明也是可以的吗,有什么区别?
在你这个例子中,使用ReflectionClass是不恰当的,因为__construct只有在实例化class时,才会执行。
也就是说ReflectionClass更多的是反射类声明时的结构,而不是类实例化后的结构,所以没有输出属性aaa是正确,因为属性aaa确实是(在类声明时)不存在的。
那么怎么看属性aaa呢,应该用ReflectionObject反射实例化后的结构,例如
<?php
class test{
    private $name;
    private $sex;
    function __construct(){
        $this->aaa='aaa';
    }
}
$test=new test();$reflect=new ReflectionObject($test);
$pro=$reflect->getProperties();
print_r($pro);
 

经过实例化以后,属性aaa才会存在,这时你就能看到属性aaa了
因为php是“动态”语言,所以可以类的成员变量不用声明,在函数中声明也是可以的。
PHP 相关文章推荐
PHP也可以?成Shell Script
Oct 09 PHP
用php来检测proxy
Oct 09 PHP
用PHP实现的随机广告显示代码
Jun 14 PHP
PHP 数据库树的遍历方法
Feb 06 PHP
php htmlspecialchars加强版
Feb 16 PHP
php限制ip地址范围的方法
Mar 31 PHP
php发送短信验证码完成注册功能
Nov 24 PHP
Zend Framework入门教程之Zend_View组件用法示例
Dec 09 PHP
php正则判断是否为合法身份证号的方法
Mar 16 PHP
php实现微信支付之现金红包
May 30 PHP
PHP PDOStatement::setAttribute讲解
Feb 01 PHP
安装docker和docker-compose实例详解
Jul 30 PHP
php堆排序(heapsort)练习
Nov 13 #PHP
php生成EAN_13标准条形码实例
Nov 13 #PHP
使用php计算排列组合的方法
Nov 13 #PHP
测试php函数的方法
Nov 13 #PHP
PHP中判断变量为空的几种方法小结
Nov 12 #PHP
php不允许用户提交空表单(php空值判断)
Nov 12 #PHP
php5.3 不支持 session_register() 此函数已启用的解决方法
Nov 12 #PHP
You might like
Mysql中limit的用法方法详解与注意事项
2008/04/19 PHP
javascript 伪数组实现方法
2010/10/11 Javascript
仅img元素创建后不添加到文档中会执行onload事件的解决方法
2011/07/31 Javascript
拥抱模块化的JavaScript
2012/03/07 Javascript
jquery 滚动条事件简单实例
2013/07/12 Javascript
jQuery lazyLoad图片延迟加载插件的优化改造方法分享
2013/08/13 Javascript
ajax请求get与post的区别总结
2013/11/04 Javascript
js实现基于正则表达式的轻量提示插件
2015/08/29 Javascript
JS操作COOKIE实现备忘记录的方法
2016/04/01 Javascript
AngularJS基础 ng-click 指令示例代码
2016/08/01 Javascript
Vue.js常用指令的使用小结
2017/06/23 Javascript
React/Redux应用使用Async/Await的方法
2017/11/16 Javascript
JS组件系列之Gojs组件 前端图形化插件之利器
2017/11/29 Javascript
vue实现商品加减计算总价的实例代码
2018/08/12 Javascript
了解JavaScript中的选择器
2019/05/24 Javascript
微信小程序设置滚动条过程详解
2019/07/25 Javascript
p5.js实现动态图形临摹
2019/10/23 Javascript
python实现模拟按键,自动翻页看u17漫画
2015/03/17 Python
Python简单的制作图片验证码实例
2017/05/31 Python
python如何将图片转换为字符图片
2020/08/19 Python
django组合搜索实现过程详解(附代码)
2019/08/06 Python
基于Python 中函数的 收集参数 机制
2019/12/21 Python
Python实现转换图片背景颜色代码
2020/04/30 Python
详解PyQt5中textBrowser显示print语句输出的简单方法
2020/08/07 Python
python录音并调用百度语音识别接口的示例
2020/12/01 Python
eBay澳大利亚站:eBay.com.au
2018/02/02 全球购物
表达自我的市场:Society6
2018/08/01 全球购物
加拿大城市本地限时优惠:Buytopia.ca
2018/09/19 全球购物
英国乐购杂货:Tesco Groceries
2018/11/29 全球购物
Mamaearth官方网站:印度母婴护理产品公司
2019/10/06 全球购物
都柏林通行卡/城市通票:The Dublin Pass
2020/02/16 全球购物
公务员培训心得体会
2013/12/28 职场文书
后备干部考察材料
2014/02/12 职场文书
乡镇领导班子批评与自我批评材料
2014/09/23 职场文书
2015年党员承诺书
2015/01/21 职场文书
2015年幼儿园后勤工作总结
2015/04/25 职场文书