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&amp;java(三)
Oct 09 PHP
PHP MemCached高级缓存配置图文教程
Aug 05 PHP
php模拟asp中的XmlHttpRequest实现http请求的代码
Mar 24 PHP
PHP的explode和implode的使用说明
Jul 17 PHP
简单的php写入数据库类代码分享
Jul 26 PHP
PHP实现的封装验证码类详解
Jun 18 PHP
9段PHP实用功能的代码推荐
Oct 14 PHP
Linux下PHP加速器APC的安装与配置笔记
Oct 24 PHP
Laravel实现自定义错误输出内容的方法
Oct 10 PHP
php foreach如何跳出两层循环(详解)
Nov 05 PHP
PHP仿qq空间或朋友圈发布动态、评论动态、回复评论、删除动态或评论的功能(上)
May 26 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 HtmlReplace输入过滤安全函数
2010/07/03 PHP
PHP学习笔记之一
2011/01/17 PHP
PHP嵌套输出缓冲代码实例
2015/05/12 PHP
ThinkPHP框架整合微信支付之Native 扫码支付模式二图文详解
2019/04/09 PHP
js parseInt(&quot;08&quot;)未指定进位制问题
2010/06/19 Javascript
使用js的replace()方法查找字符示例代码
2013/10/28 Javascript
一个简单的Node.js异步操作管理器分享
2014/04/29 Javascript
如何让浏览器支持jquery ajax load 前进、后退功能
2014/06/12 Javascript
js中日期的加减法
2015/05/06 Javascript
JS根据key值获取URL中的参数值及把URL的参数转换成json对象
2015/08/26 Javascript
jquery实现的Accordion折叠面板效果代码
2015/09/02 Javascript
JavaScript DOM 学习总结(五)
2015/11/24 Javascript
jquery ajax结合thinkphp的getjson实现跨域的方法
2016/06/06 Javascript
微信小程序本作用域下调用全局JS详解及实例
2017/02/22 Javascript
微信小程序登录态控制深入分析
2017/04/12 Javascript
原生JS实现 MUI导航栏透明渐变效果
2017/11/07 Javascript
Angular实现的敏感文字自动过滤与提示功能示例
2017/12/29 Javascript
React为 Vue 引入容器组件和展示组件的教程详解
2018/05/03 Javascript
JavaScript栈和队列相关操作与实现方法详解
2018/12/07 Javascript
vue过滤器用法实例分析
2019/03/15 Javascript
如何在Angular应用中创建包含组件方法示例
2019/03/23 Javascript
基于JS实现数字动态变化显示效果附源码
2019/07/18 Javascript
layui当点击文本框时弹出选择框,显示选择内容的例子
2019/09/02 Javascript
如何阻止移动端浏览器点击图片浏览
2020/08/29 Javascript
浅谈numpy数组中冒号和负号的含义
2018/04/18 Python
python实现列表中由数值查到索引的方法
2018/06/27 Python
python 实现图片裁剪小工具
2021/02/02 Python
在IE6系列等老式浏览器中使用HTML5的新标签实现方案
2012/12/25 HTML / CSS
项目合作意向书范本
2014/04/01 职场文书
歌唱比赛策划方案
2014/06/06 职场文书
2015年员工工作表现评语
2015/03/25 职场文书
锦旗赠语
2015/06/23 职场文书
为什么说餐饮很难做,是因为你不了解这些新规则
2019/08/20 职场文书
Node实现搜索框进行模糊查询
2021/06/28 Javascript
使用CSS设置滚动条样式
2022/01/18 HTML / CSS
豆瓣2021评分最高动画剧集-豆瓣评分最高的动画剧集2021
2022/03/18 日漫