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
PHP中的类-什么叫类
Nov 20 PHP
PHP 5.0对象模型深度探索之属性和方法
Mar 27 PHP
PHP调用MySQL的存储过程的实现代码
Aug 12 PHP
php 禁止页面缓存输出
Jan 07 PHP
PHP中date()日期函数有关参数整理
Jul 19 PHP
PHP删除非空目录的函数代码小结
Feb 28 PHP
CentOS下PHP安装Oracle扩展
Feb 15 PHP
PHP响应post请求上传文件的方法
Dec 17 PHP
PHP使用PHPExcel删除Excel单元格指定列的方法
Jul 06 PHP
php利用ob_start()清除输出和选择性输出的方法
Jan 18 PHP
PHP使用QR Code生成二维码实例
Jul 07 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实现过滤UBB代码的类
2015/03/12 PHP
php使用curl打开https网站的方法
2015/06/17 PHP
基于php双引号中访问数组元素报错的解决方法
2018/02/01 PHP
IE6不能修改NAME问题的解决方法
2010/09/03 Javascript
EXTJS FORM HIDDEN TEXTFIELD 赋值 使用value不好用的问题
2011/04/16 Javascript
对frameset、frame、iframe的js操作示例代码
2013/08/16 Javascript
js获取和设置属性的方法
2014/02/20 Javascript
JQuery查找子元素find()和遍历集合each的方法总结
2017/03/07 Javascript
JS实现发送短信验证后按钮倒计时功能(防止刷新倒计时失效)
2017/07/07 Javascript
vue router学习之动态路由和嵌套路由详解
2017/09/21 Javascript
vue-cli中的webpack配置详解
2017/09/25 Javascript
JS学习笔记之原型链和利用原型实现继承详解
2019/05/29 Javascript
springboot+vue+对接支付宝接口+二维码扫描支付功能(沙箱环境)
2020/10/15 Javascript
[51:26]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#3Secret VS OG第二局
2016/03/03 DOTA
python中使用xlrd读excel使用xlwt写excel的实例代码
2018/01/31 Python
Python实现扣除个人税后的工资计算器示例
2018/03/26 Python
python opencv实现旋转矩形框裁减功能
2018/07/25 Python
python 将对象设置为可迭代的两种实现方法
2019/01/21 Python
Django如何实现网站注册用户邮箱验证功能
2019/08/14 Python
Python-numpy实现灰度图像的分块和合并方式
2020/01/09 Python
使用Tensorboard工具查看Loss损失率
2020/02/15 Python
利用Vscode进行Python开发环境配置的步骤
2020/06/22 Python
CSS3教程(8):CSS3透明度指南
2009/04/02 HTML / CSS
Gweniss格温妮丝女包官网:英国纯手工制造潮流包包品牌
2018/02/07 全球购物
俄罗斯金苹果网上化妆品和香水商店:Goldapple
2019/12/01 全球购物
新西兰最大的天然保健及护肤品网站:HealthPost(直邮中国)
2021/02/13 全球购物
解释DataSet(ds) 和 ds as DataSet 的含义
2014/07/27 面试题
春季运动会广播稿大全
2014/02/19 职场文书
采购求职信
2014/03/17 职场文书
慰问敬老院活动总结
2014/04/26 职场文书
妇联主席先进事迹
2014/05/18 职场文书
幼儿生日活动方案
2014/08/27 职场文书
2014年四风问题个人对照自查剖析材料
2014/09/15 职场文书
微信小程序和php的登录实现
2021/04/01 PHP
Vue 打包后相对路径的引用问题
2022/06/05 Vue.js
vue如何在data中引入图片的正确路径
2022/06/05 Vue.js