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 相关文章推荐
4.与数据库的连接
Oct 09 PHP
杏林同学录(四)
Oct 09 PHP
php strtotime 函数UNIX时间戳
Jan 14 PHP
php db类库进行数据库操作
Mar 19 PHP
PHP 时间转换Unix时间戳代码
Jan 22 PHP
php中is_null,empty,isset,unset 的区别详细介绍
Apr 28 PHP
PHP数据类型之整数类型、浮点数的介绍
Apr 28 PHP
preg_match_all使用心得分享
Jan 31 PHP
php ImageMagick windows下安装教程
Jan 26 PHP
常用PHP数组排序函数归纳
Aug 08 PHP
PHP解决中文乱码
Apr 28 PHP
修改Laravel自带的认证系统的User类的命名空间的步骤
Oct 15 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的cURL快速入门教程 (小偷采集程序)
2011/06/02 PHP
php dirname(__FILE__) 获取当前文件的绝对路径
2011/06/28 PHP
PHP编写daemon process详解及实例代码
2016/09/30 PHP
两个DIV等高的JS的实现代码
2007/12/23 Javascript
javascript各种复制代码收集
2008/09/20 Javascript
JavaScript为对象原型prototype添加属性的两种方式
2010/08/01 Javascript
JQUERY dialog的用法详细解析
2013/12/19 Javascript
深入分析JQuery和JavaScript的异同
2014/10/23 Javascript
如何高效率去掉js数组中的重复项
2016/04/12 Javascript
BootStrap中Tab页签切换实例代码
2016/05/30 Javascript
AngularJS的ng Http Request与response格式转换方法
2016/11/07 Javascript
AngularJS 在同一个界面启动多个ng-app应用模块详解
2016/12/20 Javascript
JS区分Object与Aarry的六种方法总结
2017/02/27 Javascript
js中的DOM模拟购物车功能
2017/03/22 Javascript
详解如何提高 webpack 构建 Vue 项目的速度
2017/07/03 Javascript
jQuery Ajax向服务端传递数组参数值的实例代码
2017/09/03 jQuery
帝国cms首页列表页实现点赞功能
2017/10/30 Javascript
Vue开发实现吸顶效果的示例代码
2018/08/21 Javascript
微信小程序的注册页面包含倒计时验证码、获取用户信息
2019/05/22 Javascript
JavaScript定时器设置、使用与倒计时案例详解
2019/07/08 Javascript
JS面向对象编程基础篇(三) 继承操作实例详解
2020/03/03 Javascript
python使用beautifulsoup从爱奇艺网抓取视频播放
2014/01/23 Python
Linux下将Python的Django项目部署到Apache服务器
2015/12/24 Python
python中reduce()函数的使用方法示例
2017/09/29 Python
Python实现连接postgresql数据库的方法分析
2017/12/27 Python
在django模板中实现超链接配置
2019/08/21 Python
Python之数据序列化(json、pickle、shelve)详解
2019/08/30 Python
python 实现将list转成字符串,中间用空格隔开
2019/12/25 Python
pytorch实现建立自己的数据集(以mnist为例)
2020/01/18 Python
Python使用扩展库pywin32实现批量文档打印实例
2020/04/09 Python
美国知名平价彩妆品牌:e.l.f. Cosmetics
2017/11/20 全球购物
Jdbc数据访问技术面试题
2012/03/30 面试题
运动会通讯稿50字
2014/01/30 职场文书
2014年中秋寄语
2014/08/11 职场文书
社区助残日活动总结
2014/08/29 职场文书
vue cli4中mockjs在dev环境和build环境的配置详情
2022/04/06 Vue.js