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写MySQL数据 实现代码
Jun 15 PHP
php 不同编码下的字符串长度区分
Sep 26 PHP
深入理解PHP几个算法:PHP冒泡、PHP二分法、PHP求素数、PHP乘法表
Jun 06 PHP
zf框架的session会话周期及次数限制使用示例
Mar 13 PHP
ThinkPHP中Common/common.php文件常用函数功能分析
May 20 PHP
PHP简单读取PDF页数的实现方法
Jul 21 PHP
php插入含有特殊符号数据的处理方法
Nov 24 PHP
PHP实现json_decode不转义中文的方法
May 20 PHP
PHP以json或xml格式返回请求数据的方法
May 31 PHP
在 Laravel 项目中使用 webpack-encore的方法
Jul 21 PHP
laravel 实现关闭CSRF(全部关闭、部分关闭)
Oct 21 PHP
laravel实现图片上传预览,及编辑时可更换图片,并实时变化的例子
Nov 14 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编写一个简单的路由类
2011/04/13 PHP
php表单加入Token防止重复提交的方法分析
2016/10/10 PHP
PHP 获取客户端 IP 地址的方法实例代码
2018/11/11 PHP
使用composer命令加载vendor中的第三方类库 的方法
2019/07/09 PHP
基于jquery实现的服务器验证控件的启用和禁用代码
2010/04/27 Javascript
jquer之ajaxQueue简单实现代码
2011/09/15 Javascript
javascript解析json数据的3种方式
2014/05/08 Javascript
Nodejs Post请求报socket hang up错误的解决办法
2014/09/25 NodeJs
javascript感应鼠标图片透明度显示的方法
2015/02/24 Javascript
JS+CSS实现的日本门户网站经典选项卡导航效果
2015/09/27 Javascript
angular2使用简单介绍
2016/03/01 Javascript
BootStrap的JS插件之轮播效果案例详解
2016/05/16 Javascript
JQuery手速测试小游戏实现思路详解
2016/09/20 Javascript
基于BootstrapValidator的Form表单验证(24)
2016/12/12 Javascript
关于AngularJs数据的本地存储详解
2017/01/20 Javascript
基于jQuery的表单填充实例
2017/08/22 jQuery
浅谈js的解析顺序 作用域 严格模式
2017/10/23 Javascript
在vue中实现简单页面逆传值的方法
2017/11/27 Javascript
Nodejs调用Dll模块的方法
2018/09/17 NodeJs
vue 自定义右键样式的实例代码
2019/11/06 Javascript
浅谈Webpack4 Tree Shaking 终极优化指南
2019/11/18 Javascript
vue项目中自定义video视频控制条的实现代码
2020/04/26 Javascript
微信小程序实现简单的select下拉框
2020/11/23 Javascript
[05:36]DOTA2 2015国际邀请赛中国区预选赛第四日TOP10
2015/05/29 DOTA
Python Web框架Pylons中使用MongoDB的例子
2013/12/03 Python
python 控制Asterisk AMI接口外呼电话的例子
2019/08/08 Python
Python3.8安装Pygame教程步骤详解
2020/08/14 Python
python上下文管理的使用场景实例讲解
2021/03/03 Python
MSC邮轮官方网站:加勒比海、地中海和世界各地的假期
2018/08/27 全球购物
你常见到的runtime exception
2016/09/05 面试题
实习期自我鉴定
2013/10/11 职场文书
护理专业个人求职简历的自我评价
2013/10/13 职场文书
化验室技术员岗位职责
2013/12/24 职场文书
文员岗位职责
2015/02/04 职场文书
2016年端午节红领巾广播稿
2015/12/18 职场文书
Opencv中cv2.floodFill算法的使用
2021/06/18 Python