手机
当前位置:查字典教程网 >编程开发 >php教程 >PHP反射类ReflectionClass和ReflectionObject的使用方法
PHP反射类ReflectionClass和ReflectionObject的使用方法
摘要:PHP中的扩展反射类,该扩展用来分析php程序,导出或提取出关于类、方法、属性、参数等的详细信息,包括注释。看一个这样的问题,php类的成员...

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反射类ReflectionClass和ReflectionObject的使用方法】相关文章:

利用php和js实现页面数据刷新

PHP ajax 异步执行不等待执行结果的处理方法

PHP基于MySQL数据库实现对象持久层的方法

Yii获取当前url和域名的方法

PHP+shell实现多线程的方法

php遍历类中包含的所有元素的方法

PHP实现多线程的两个方法

PHP获取文件行数的方法

关于PHP中的Class的几点个人看法

Yii实现自动加载类地图的方法

精品推荐
分类导航