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 相关文章推荐
vBulletin HACK----关于排版的两个HACK
Oct 09 PHP
php获取网页内容方法总结
Dec 04 PHP
PHP 变量类型的强制转换
Oct 23 PHP
PHP 遍历文件实现代码
May 04 PHP
使用php将某个目录下面的所有文件罗列出来的方法详解
Jun 21 PHP
PHP 动态生成静态HTML页面示例代码
Jan 15 PHP
PHP生成不重复标识符的方法
Nov 21 PHP
PHP的Socket网络编程入门指引
Aug 11 PHP
基于php实现随机合并数组并排序(原排序)
Nov 26 PHP
通过chrome浏览器控制台(Console)进行PHP Debug的方法
Oct 19 PHP
PHP将英文数字转换为阿拉伯数字实例讲解
Jan 28 PHP
解决PHPstudy Apache无法启动的问题【亲测有效】
Oct 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
使PHP自定义函数返回多个值
2006/11/26 PHP
php实现的获取网站备案信息查询代码(360)
2013/09/23 PHP
一个非常完美的读写ini格式的PHP配置类分享
2015/02/12 PHP
php源码分析之DZX1.5随机数函数random用法
2015/06/17 PHP
php封装的验证码类分享
2017/02/26 PHP
关于图片验证码设计的思考
2007/01/29 Javascript
jQuery提交多个表单的小例子
2013/06/30 Javascript
jQuery 浮动导航菜单适合购物商品类型的网站
2014/09/09 Javascript
js实现鼠标经过时图片滚动停止的方法
2015/02/16 Javascript
localResizeIMG先压缩后使用ajax无刷新上传(移动端)
2015/08/11 Javascript
jquery实现向下滑出的二级导航下滑菜单效果
2015/08/25 Javascript
jquery实现页面常用的返回顶部效果
2016/03/04 Javascript
js html5 css俄罗斯方块游戏再现
2016/10/17 Javascript
jQuery布局组件EasyUI Layout使用方法详解
2017/02/28 Javascript
利用jquery如何从json中读取数据追加到html中
2017/12/01 jQuery
vue-infinite-loading2.0 中文文档详解
2018/04/08 Javascript
微信小程序获取音频时长与实时获取播放进度问题
2018/08/28 Javascript
JavaScript闭包相关知识解析
2019/10/19 Javascript
在Layui中操作数据表格,给指定单元格添加事件示例
2019/10/26 Javascript
[06:23]2014DOTA2西雅图国际邀请赛 小组赛7月12日TOPPLAY
2014/07/12 DOTA
Python实现求最大公约数及判断素数的方法
2015/05/26 Python
详细解读tornado协程(coroutine)原理
2018/01/15 Python
python+matplotlib实现鼠标移动三角形高亮及索引显示
2018/01/15 Python
Pycharm取消py脚本中SQL识别的方法
2018/11/29 Python
Django 日志配置按日期滚动的方法
2019/01/31 Python
python射线法判断一个点在图形区域内外
2019/06/28 Python
python自带tkinter库实现棋盘覆盖图形界面
2019/07/17 Python
python 用opencv实现图像修复和图像金字塔
2020/11/27 Python
京东奢侈品:全球奢侈品牌
2018/03/17 全球购物
Book Depository美国:全球领先的专业网上书店之一
2019/08/14 全球购物
普通院校学生的自荐信
2013/11/27 职场文书
珠宝的促销活动方案
2014/08/31 职场文书
关于运动会广播稿300字
2014/10/05 职场文书
大学生团员个人总结
2015/02/14 职场文书
springboot中rabbitmq实现消息可靠性机制详解
2021/09/25 Java/Android
解决redis批量删除key值的问题
2022/03/23 Redis