PHP反射类ReflectionClass和ReflectionObject的使用方法
发布:smiling 来源: PHP粉丝网 添加日期:2020-06-28 16:18:14 浏览: 评论:0
PHP中的扩展反射类,该扩展用来分析php程序,导出或提取出关于类、方法、属性、参数等的详细信息,包括注释。
看一个这样的问题,php类的成员变量没有在类中声明,而是在函数中声明,有什么不同?
- class test{
- private $name;
- private $sex;
- function __construct(){
- $this->aaa='aaa';
- }
- }
- $test=new test();
- //phpfensi.com
- $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是“动态”语言,所以可以类的成员变量不用声明,在函数中声明也是可以的。
Tags: ReflectionClass ReflectionObject
- 上一篇:php远程下载类分享
- 下一篇:生成随机字符串和验证码的类的PHP实例
相关文章
- ·php反射类 ReflectionClass使用例子(2016-08-22)
- ·php反射类ReflectionClass用法分析(2021-08-03)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)