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

 更新时间:2013年11月13日 10:26:03   作者:  
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是“动态”语言,所以可以类的成员变量不用声明,在函数中声明也是可以的。

相关文章

  • 10个php函数实用却不常见

    10个php函数实用却不常见

    函数是PHP如此强大的源泉,但是很多PHP函数并没有得到充分的利用。这里,我们给大家简单介绍10个不常见,但非常有用的函数。
    2015-10-10
  • php 采集书并合成txt格式的实现代码

    php 采集书并合成txt格式的实现代码

    记得上次有过一个叫采集后的处理这个就是它的升级版本 连采再处理,合成一本书txt的。
    2009-03-03
  • PHP实现的登录,注册及密码修改功能分析

    PHP实现的登录,注册及密码修改功能分析

    这篇文章主要介绍了PHP实现的登录,注册及密码修改功能,结合实例形式分析了php实现登陆功能的相关数据库操作、ajax交互、数据验证及验证码相关操作技巧,需要的朋友可以参考下
    2016-11-11
  • PHP入门教程之操作符与控制结构流程详解

    PHP入门教程之操作符与控制结构流程详解

    这篇文章主要介绍了PHP入门教程之操作符与控制结构流程,结合实例形式详细分析了php基本的赋值、自增、比较、三目运算符以及if语句、switch语句、for语句等流程控制语句的使用技巧,需要的朋友可以参考下
    2016-09-09
  • PHP操作路由器实现方法示例

    PHP操作路由器实现方法示例

    这篇文章主要介绍了PHP操作路由器实现方法,结合实例形式分析了php基于fsockopen针对路由器进行连接、数据传递、路由切换等相关操作实现技巧,需要的朋友可以参考下
    2019-04-04
  • php include和require的区别深入解析

    php include和require的区别深入解析

    本篇文章是对php中include与require的区别进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • php实现登陆模块功能示例

    php实现登陆模块功能示例

    这篇文章主要介绍了php实现登陆模块的方法,结合实例形式分析了php实现登陆功能的步骤与相关操作技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2016-10-10
  • Laravel 5.0 发布 新版本特性详解

    Laravel 5.0 发布 新版本特性详解

    这篇文章主要介绍了Laravel 5.0 发布 新版本特性详解,本文讲解了目录结构、Contracts、路由缓存、路由中间、控制器方法注入、认证脚手架等新特性,需要的朋友可以参考下
    2015-02-02
  • javascript数组与php数组的地址传递及值传递用法实例

    javascript数组与php数组的地址传递及值传递用法实例

    这篇文章主要介绍了javascript数组与php数组的地址传递及值传递用法,实例分析了javascript与php的数组使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-01-01
  • php和C#的yield迭代器实现方法对比分析

    php和C#的yield迭代器实现方法对比分析

    这篇文章主要介绍了php和C#的yield迭代器实现方法,简单说明了yield迭代器的原理,并结合具体实例形式对比分析了php和C#的yield迭代器相关使用技巧,需要的朋友可以参考下
    2019-07-07

最新评论