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 相关文章推荐
文章推荐系统(二)
Oct 09 PHP
mayfish 数据入库验证代码
Apr 30 PHP
php利用iframe实现无刷新文件上传功能的代码
Sep 29 PHP
PHP中鲜为人知的10个函数
Feb 28 PHP
PHP对接微信公众平台消息接口开发流程教程
Mar 25 PHP
PHP 读取和编写 XML
Nov 19 PHP
php不使用copy()函数复制文件的方法
Mar 13 PHP
PHP基于正则批量替换Img中src内容实现获取缩略图的功能示例
Jun 07 PHP
PHP中$GLOBALS['HTTP_RAW_POST_DATA']和$_POST的区别分析
Jul 03 PHP
TP(thinkPHP)框架多层控制器和多级控制器的使用示例
Jun 13 PHP
PHP信号处理机制的操作代码讲解
Apr 19 PHP
PHP中-&gt;和=&gt;的含义及使用示例解析
Aug 06 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
为什么夜间收到的中波电台比白天多
2021/03/01 无线电
PHP使用DirectoryIterator显示下拉文件列表的方法
2015/03/13 PHP
PHP截取IE浏览器并缩小原图的方法
2016/03/04 PHP
JavaScript mapreduce工作原理简析
2012/11/25 Javascript
js 中的switch表达式使用示例
2020/06/03 Javascript
JavaScript交换两个变量值的七种解决方案
2016/12/01 Javascript
在点击div中的p时,如何阻止事件冒泡
2017/02/07 Javascript
微信小程序本作用域下调用全局JS详解及实例
2017/02/22 Javascript
docker中编译nodejs并使用nginx启动
2017/06/23 NodeJs
详解vue-cli与webpack结合如何处理静态资源
2017/09/19 Javascript
详解vue中引入stylus及报错解决方法
2017/09/22 Javascript
p5.js 毕达哥拉斯树的实现代码
2018/03/23 Javascript
Node.js 如何利用异步提升任务处理速度
2019/01/07 Javascript
js中值引用和地址引用实例分析
2019/06/21 Javascript
使用vue制作滑动标签
2019/09/21 Javascript
vue+iview框架实现左侧动态菜单功能的示例代码
2020/07/23 Javascript
uniapp开发小程序实现滑动页面控制元素的显示和隐藏效果
2020/12/10 Javascript
[00:30]塑造者的传承礼包-戴泽“暗影之焰”套装展示视频
2014/04/04 DOTA
[46:49]完美世界DOTA2联赛PWL S3 access vs Rebirth 第二场 12.19
2020/12/24 DOTA
[01:10:30]DOTA2-DPC中国联赛正赛 Dragon vs Dynasty BO3 第一场 3月4日
2021/03/11 DOTA
Python中Numpy ndarray的使用详解
2019/05/24 Python
python区分不同数据类型的方法
2019/10/14 Python
python函数声明和调用定义及原理详解
2019/12/02 Python
python图形界面开发之wxPython树控件使用方法详解
2020/02/24 Python
PyQt5+Pycharm安装和配置图文教程详解
2020/03/24 Python
Pycharm在指定目录下生成文件和删除文件的实现
2020/12/28 Python
如何利用CSS3制作3D效果文字具体实现样式
2013/05/02 HTML / CSS
canvas实现滑动验证的实现示例
2020/08/11 HTML / CSS
纽约21世纪百货官网:Century 21
2016/08/27 全球购物
Vans澳大利亚官网:购买鞋子、服装及配件
2019/09/05 全球购物
车间班组长岗位职责
2013/11/13 职场文书
计算机相关的自我评价
2014/01/15 职场文书
2014年教育培训工作总结
2014/12/08 职场文书
2015年行政助理工作总结
2015/04/30 职场文书
2019幼儿教师求职信(3篇)
2019/09/20 职场文书
mysql事务隔离级别详情
2021/10/24 MySQL