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编程开发“虚拟域名”系统
Oct 09 PHP
php4的session功能评述(一)
Oct 09 PHP
备份mysql数据库的php代码(一个表一个文件)
May 28 PHP
Warning: session_destroy() : Trying to destroy uninitialized sessionq错误
Jun 16 PHP
PHP fgetcsv 定义和用法(附windows与linux下兼容问题)
May 29 PHP
PHP中mysqli_affected_rows作用行数返回值分析
Dec 26 PHP
php采集内容中带有图片地址的远程图片并保存的方法
Jan 03 PHP
PHP入门教程之会话控制技巧(cookie与session)
Sep 11 PHP
详解ThinkPHP3.2.3验证码显示、刷新、校验
Dec 29 PHP
yii插入数据库防并发的简单代码
May 27 PHP
PHP多进程之pcntl_fork的实例详解
Oct 15 PHP
thinkPHP框架动态配置用法实例分析
Jun 14 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
php4与php5的区别小结(配置异同)
2011/12/20 PHP
php jquery 多文件上传简单实例
2013/12/23 PHP
PHP获取文件的MD5值并判断是否被修改的例子
2014/06/19 PHP
Windows下的PHP安装pear教程
2014/10/24 PHP
php调用新浪短链接API的方法
2014/11/08 PHP
微信支付开发发货通知实例
2016/07/12 PHP
PHP获取访问页面HTTP状态码的实现代码
2016/11/03 PHP
PHP实现随机数字、字母的验证码功能
2018/08/01 PHP
php 使用ActiveMQ发送消息,与处理消息操作示例
2020/02/23 PHP
JavaScript 语言的递归编程
2010/05/18 Javascript
使用jQueryMobile实现滑动翻页效果的方法
2015/02/04 Javascript
js实现获取div坐标的方法
2015/11/16 Javascript
JavaScript的removeChild()函数用法详解
2015/12/27 Javascript
weex slider实现滑动底部导航功能
2017/08/28 Javascript
vue数字类型过滤器的示例代码
2017/09/07 Javascript
基于D3.js实现时钟效果
2018/07/17 Javascript
angularJs中json数据转换与本地存储的实例
2018/10/08 Javascript
使用Vue父子组件通信实现todolist的功能示例代码
2019/04/11 Javascript
微信小程序webview与h5通过postMessage实现实时通讯的实现
2019/08/20 Javascript
原生JavaScript实现日历功能代码实例(无引用Jq)
2019/09/23 Javascript
JS如何实现封装列表右滑动删除收藏按钮
2020/07/23 Javascript
从零学Python之入门(二)基本数据类型
2014/05/25 Python
python爬虫headers设置后无效的解决方法
2017/10/21 Python
python enumerate函数的使用方法总结
2017/11/15 Python
浅析Git版本控制器使用
2017/12/10 Python
python实现两个文件合并功能
2018/04/01 Python
python如何导出微信公众号文章方法详解
2020/08/31 Python
利用html5 canvas破解简单验证码及getImageData接口应用
2013/01/25 HTML / CSS
速比涛英国官网:Speedo英国
2019/07/15 全球购物
政法大学毕业生自荐信范文
2014/01/01 职场文书
购房协议书范本
2014/04/11 职场文书
小学生寒假家长评语
2014/04/16 职场文书
四风问题自我剖析材料
2014/10/07 职场文书
课外活动总结
2015/02/04 职场文书
八年级作文之感恩
2019/11/22 职场文书
简单聊聊TypeScript只读修饰符
2022/04/06 Javascript