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
配置Apache2.2+PHP5+CakePHP1.2+MySQL5运行环境
Apr 25 PHP
PHP 远程关机实现代码
Nov 10 PHP
通用PHP动态生成静态HTML网页的代码
Mar 04 PHP
一个PHP的远程图片抓取函数分享
Sep 25 PHP
网页上facebook分享功能具体实现
Jan 26 PHP
PHP中ini_set和ini_get函数的用法小结
Feb 18 PHP
php把session写入数据库示例
Feb 26 PHP
PHP魔术方法的使用示例
Jun 23 PHP
php生成验证码,缩略图及水印图的类分享
Apr 07 PHP
php实现不通过扩展名准确判断文件类型的方法【finfo_file方法与二进制流】
Apr 18 PHP
php 使用html5 XHR2实现上传文件与进度显示功能示例
Mar 03 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
PHP判断图片格式的七种方法小结
2013/06/03 PHP
遍历echsop的region表形成缓存的程序实例代码
2016/11/01 PHP
PHP自定义错误处理的方法分析
2018/12/19 PHP
php curl简单采集图片生成base64编码(并附curl函数参数说明)
2019/02/15 PHP
JavaScript下申明对象的几种方法小结
2008/10/02 Javascript
Javascript 构造函数,公有,私有特权和静态成员定义方法
2009/11/30 Javascript
javascript中match函数的用法小结
2014/02/08 Javascript
jquery实现checkbox 全选/全不选的通用写法
2014/02/22 Javascript
在javascript中随机数 math random如何生成指定范围数值的随机数
2015/10/21 Javascript
jQuery.trim() 函数及trim()用法详解
2015/10/26 Javascript
js鼠标点击图片切换效果实现代码
2015/11/19 Javascript
jquery实现左右无缝轮播图
2020/07/31 Javascript
jQuery 限制输入字符串长度
2016/06/20 Javascript
浅谈js图片前端预览之filereader和window.URL.createObjectURL
2016/06/30 Javascript
省市二级联动小案例讲解
2016/07/24 Javascript
javascript中的深复制详解及实例分析
2016/12/29 Javascript
详解JavaScript树结构
2017/01/09 Javascript
js编写简单的计时器功能
2017/07/15 Javascript
详解NODEJS的http实现
2018/01/04 NodeJs
浅谈jquery fullpage 插件增加头部和版权的方法
2018/03/20 jQuery
JavaScript中常用的简洁高级技巧总结
2019/03/10 Javascript
qrcode生成二维码微信长按无法识别问题的解决
2019/04/04 Javascript
js常用方法、检查是否有特殊字符串、倒序截取字符串操作完整示例
2020/01/26 Javascript
[54:10]完美世界DOTA2联赛PWL S2 Magma vs FTD 第二场 11.29
2020/12/03 DOTA
Python 时间操作例子和时间格式化参数小结
2014/04/24 Python
Python实现的括号匹配判断功能示例
2018/08/25 Python
python小程序实现刷票功能详解
2019/07/17 Python
python并发编程多进程之守护进程原理解析
2019/08/20 Python
3行Python代码实现图像照片抠图和换底色的方法
2019/10/10 Python
tensorflow实现测试时读取任意指定的check point的网络参数
2020/01/21 Python
Python jieba库分词模式实例用法
2021/01/13 Python
五分钟学会HTML5的WebSocket协议
2019/11/22 HTML / CSS
印尼综合在线预订网站:Tiket.com(机票、酒店、火车、租车和娱乐)
2018/10/11 全球购物
企业授权委托书范本
2014/04/02 职场文书
预备党员转正材料
2014/12/19 职场文书
党支部评议意见
2015/06/02 职场文书