PHP反射类ReflectionClass和ReflectionObject的使用方法
程序员文章站
2022-06-22 21:06:08
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类的成员变量没有在类中声明,而是在函数中声明,有什么不同?
复制代码 代码如下:
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的反射类ReflectionClass、ReflectionMethod使用实例
-
PHP反射类ReflectionClass和ReflectionObject的使用方法
-
PHP的反射类ReflectionClass、ReflectionMethod使用实例,reflectionmethod
-
PHP使用反射机制实现查找类和方法的所在位置_PHP
-
PHP通过反射动态加载第三方类和获得类源码的实例_PHP
-
PHP通过反射动态加载第三方类和获得类源码的实例_php实例
-
PHP使用反射机制实现查找类和方法的所在位置,php所在位置_PHP教程
-
PHP使用反射机制实现查找类和方法的所在位置,php所在位置
-
PHP通过反射动态加载第三方类和获得类源码的实例_php实例