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基础教程 php内置函数实例教程
Aug 21 PHP
保存到桌面、设为桌面且带图标的PHP代码
Nov 19 PHP
PHP FATAL ERROR: CALL TO UNDEFINED FUNCTION BCMUL()解决办法
May 04 PHP
php支付宝手机网页支付类实例
Mar 04 PHP
php实现用于删除整个目录的递归函数
Mar 16 PHP
php的crc32函数使用时需要注意的问题(不然就是坑)
Apr 21 PHP
Joomla使用Apache重写模式的方法
May 04 PHP
PHP中Array相关函数简介
Jul 03 PHP
Paypal实现循环扣款(订阅)功能
Mar 23 PHP
Laravel5中Cookie的使用详解
May 03 PHP
PHPMAILER实现PHP发邮件功能
Apr 18 PHP
Laravel 对某一列进行筛选然后求和sum()的例子
Oct 10 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/10/09 PHP
PHP冒泡排序算法代码详细解读
2011/07/17 PHP
smarty中改进truncate使其支持中文的方法
2016/05/30 PHP
Yii2框架制作RESTful风格的API快速入门教程
2016/11/08 PHP
TP5框架安全机制实例分析
2020/04/05 PHP
JS 面向对象之神奇的prototype
2011/02/26 Javascript
javascript学习笔记(十三) js闭包介绍(转)
2012/06/20 Javascript
当自定义数据属性为json格式字符串时jQuery的data api问题探讨
2013/02/18 Javascript
JavaScript中把数字转换为字符串的程序代码
2013/06/19 Javascript
用JS做的简单的可折叠的两级树形菜单
2013/09/21 Javascript
js中创建对象的几种方式示例介绍
2014/01/26 Javascript
AngularJS使用ng-Cloak阻止初始化闪烁问题的方法
2016/11/03 Javascript
vue-cli安装使用流程步骤详解
2018/11/08 Javascript
angularjs实现table表格td单元格单击变输入框/可编辑状态示例
2019/02/21 Javascript
基于three.js实现的3D粒子动效实例代码
2019/04/09 Javascript
详解实现一个通用的“划词高亮”在线笔记功能
2019/04/23 Javascript
LayUI动态设置checkbox不显示的解决方法
2019/09/02 Javascript
Angular6项目打包优化的实现方法
2019/12/15 Javascript
Javascript Worker子线程代码实例
2020/02/20 Javascript
js实现微信聊天界面
2020/08/09 Javascript
【Python】Python的urllib模块、urllib2模块批量进行网页下载文件
2016/11/19 Python
python用Pygal如何生成漂亮的SVG图像详解
2017/02/10 Python
Python中django学习心得
2017/12/06 Python
Python requests库用法实例详解
2018/08/14 Python
Python理解递归的方法总结
2019/01/28 Python
Python3视频转字符动画的实例代码
2019/08/29 Python
python3 webp转gif格式的实现示例
2019/12/10 Python
Elemis美国官网:英国的第一豪华护肤品牌
2018/03/15 全球购物
50道外企软件测试面试题
2014/08/18 面试题
文明倡议书范文
2014/04/15 职场文书
小学语文课后反思精选
2014/04/25 职场文书
第二批党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
2014年防汛工作总结
2014/12/08 职场文书
2015年七一建党节慰问信
2015/03/23 职场文书
Python获取百度热搜的完整代码
2021/04/07 Python
解决pytorch读取自制数据集出现过的问题
2021/05/31 Python