PHP反射类ReflectionClass和ReflectionObject的使用方法

2015-01-24信息快讯网

PHP反射类ReflectionClass和ReflectionObject

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是“动态”语言,所以可以类的成员变量不用声明,在函数中声明也是可以的。
浅析ThinkPHP中execute和query方法的区别
Codeigniter上传图片出现“You did not select a file to upload”错误解决办法
PHP错误Cannot use object of type stdClass as array in错误的解决办法
Codeigniter出现错误提示Error with CACHE directory的解决方案
浅谈Eclipse PDT调试PHP程序
使用php批量删除数据库下所有前缀为prefix_的表
PHP中把stdClass Object转array的几个方法
PHP异常Parse error: syntax error, unexpected T_VAR错误解决方法
PHP FATAL ERROR: CALL TO UNDEFINED FUNCTION BCMUL()解决办法
php警告Creating default object from empty value 问题的解决方法
使用php伪造referer的方法 利用referer防止图片盗链
phpQuery占用内存过多的处理方法
php堆排序(heapsort)练习
session在php5.3中的变化 session_is_registered() is deprecated in
php使用exec shell命令注入的方法讲解
php使用mb_check_encoding检查字符串在指定的编码里是否有效
php define的第二个参数使用方法
在PHP上显示JFreechart画的统计图方法
FireFox浏览器使用Javascript上传大文件
简单实用的.net DataTable导出Execl
关于php程序报date()警告的处理(date_default_timezone_set)
PHP利用REFERER根居访问来地址进行页面跳转
如何使用FireFox插件FirePHP调试PHP
实测在class的function中include的文件中非php的global全局环境
如何解决CI框架的Disallowed Key Characters错误提示
浅析php面向对象public private protected 访问修饰符
php selectradio和checkbox默认选择的实现方法详解
PHP Class&Object -- 解析PHP实现二叉树
PHP Class&Object -- PHP 自排序二叉树的深入解析
解析PHP中DIRECTORY_SEPARATOR,PATH_SEPARATOR两个常量的作用
©2014-2024 dbsqp.com