源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

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

  • 时间:2020-12-22 11:43 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:PHP反射类ReflectionClass和ReflectionObject的使用方法
PHP中的扩展反射类,该扩展用来分析php程序,导出或提取出关于类、方法、属性、参数等的详细信息,包括注释。 看一个这样的问题,php类的成员变量没有在类中声明,而是在函数中声明,有什么不同?
[u]复制代码[/u] 代码如下:
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反射实例化后的结构,例如
[u]复制代码[/u] 代码如下:
<?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是“动态”语言,所以可以类的成员变量不用声明,在函数中声明也是可以的。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部