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 smarty模版引擎中的缓存应用
Dec 11 PHP
使用NetBeans + Xdebug调试PHP程序的方法
Apr 12 PHP
php 伪造本地文件包含漏洞的代码
Nov 03 PHP
编写Smarty插件在模板中直接加载数据的详细介绍
Jun 26 PHP
小谈php正则提取图片地址
Mar 27 PHP
Codeigniter的一些优秀特性总结
Jan 21 PHP
CentOS安装php v8js教程
Feb 26 PHP
php+redis在实际项目中HTTP 500: Internal Server Error故障排除
Feb 05 PHP
php curl上传、下载、https登陆实现代码
Jul 23 PHP
PHP fprintf()函数用法讲解
Feb 16 PHP
Laravel 数据库加密及数据库表前缀配置方法
Oct 10 PHP
如何在PHP中使用数组
Jun 09 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实现163邮箱自动发送邮件
2016/03/29 PHP
php类的自动加载操作实例详解
2016/09/28 PHP
cakephp2.X多表联合查询join及使用分页查询的方法
2017/02/23 PHP
thinkphp 5框架实现登陆,登出及session登陆状态检测功能示例
2019/10/10 PHP
javascript 跳转代码集合
2009/12/03 Javascript
风吟的小型JavaScirpt库 (FY.JS).
2010/03/09 Javascript
jquery选择符快速提取web表单数据示例
2014/03/27 Javascript
jQuery选择器querySelector的使用指南
2015/01/23 Javascript
Node.js事件驱动
2015/06/18 Javascript
jQuery实现的AJAX简单弹出层效果代码
2015/11/26 Javascript
本地Bootstrap文件字体图标引入却无法显示问题的解决方法
2020/04/18 Javascript
JavaScript之浏览器对象_动力节点Java学院整理
2017/07/03 Javascript
让nodeJS支持ES6的词法----babel的安装和使用方法
2017/07/31 NodeJs
基于vue开发微信小程序mpvue-docs跳转页面功能
2019/04/10 Javascript
ES6知识点整理之Proxy的应用实例详解
2019/04/16 Javascript
jQuery层叠选择器用法实例分析
2019/06/28 jQuery
JS监听组合按键思路及实现过程
2020/04/17 Javascript
JS script脚本中async和defer区别详解
2020/06/24 Javascript
Zabbix实现微信报警功能
2016/10/09 Python
Python 性能优化技巧总结
2016/11/01 Python
numpy基础教程之np.linalg
2019/02/12 Python
python wxpython 实现界面跳转功能
2019/12/17 Python
详解python日志输出使用配置文件格式
2021/02/10 Python
用CSS3实现背景渐变的方法
2015/07/14 HTML / CSS
CSS3 @media的基本用法总结
2019/09/10 HTML / CSS
HTML5之WebGL 3D概述(上)—WebGL原生开发开启网页3D渲染新时代
2013/01/31 HTML / CSS
ALEX AND ANI:手镯,项链,耳环和更多
2017/04/20 全球购物
美丽的现代设计家具:2Modern
2018/07/26 全球购物
初始化了一个没有run()方法的线程类,是否会出错?
2014/03/27 面试题
应届毕业生求职信范文分享
2013/12/26 职场文书
部门年终奖分配方案
2014/05/07 职场文书
联谊活动总结
2014/08/28 职场文书
妈妈别哭观后感
2015/06/08 职场文书
优秀团员主要事迹范文
2015/11/05 职场文书
解析MySQL索引的作用
2022/03/03 MySQL
Windows Server 修改远程桌面端口的实现
2022/06/25 Servers