PHP反射类ReflectionClass和ReflectionObject的使用方法_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是“动态”语言,所以可以类的成员变量不用声明,在函数中声明也是可以的。

时间: 2024-11-03 20:29:51

PHP反射类ReflectionClass和ReflectionObject的使用方法_php技巧的相关文章

php反射类ReflectionClass用法分析_php技巧

本文实例讲述了php反射类ReflectionClass用法.分享给大家供大家参考,具体如下: 先来看一段代码: /** * @name PHP反射API--利用反射技术实现的插件系统架构 * @author :PHPCQ.COM */ interface Iplugin { public static function getName(); } function findPlugins() { $plugins = array(); foreach(get_declared_classes()

php反射类 ReflectionClass

  什么是php反射类,顾名思义,可以理解为一个类的映射. 举个例子: class fuc { //定义一个类 static function ec() { echo '我是一个类'; } } $class=new ReflectionClass('fuc'); //建立 fuc这个类的反射类 echo $class; //输出这反射类 Class [ class A ] { @@ F:phpwebmyPHPtest.php 23-30 - Constants [0] { } - Static

PHP的反射类ReflectionClass、ReflectionMethod使用实例_php实例

PHP5 具有完整的反射API,添加对类.接口.函数.方法和扩展进行反向工程的能力. 反射是什么? 它是指在PHP运行状态中,扩展分析PHP程序,导出或提取出关于类.方法.属性.参数等的详细信息,包括注释.这种动态获取的信息以及动态调用对象的方法的功能称为反射API.反射是操纵面向对象范型中元模型的API,其功能十分强大,可帮助我们构建复杂,可扩展的应用. 其用途如:自动加载插件,自动生成文档,甚至可用来扩充PHP语言. PHP反射api由若干类组成,可帮助我们用来访问程序的元数据或者同相关的注

php反射类 ReflectionClass使用例子

反射类是一个类的映射   namespace News;   class News{       public $newsid;        public function index(){            --       }   } 正常我们实例化一个类是这样: $News = new News\News(); 如果我们要实例化News类的反射类是这样:$News = new \ReflectionClass('News\News'); 那么通过反射类实例化的类和普通类有什么不同呢?

php使用类继承解决代码重复的问题_php技巧

本文实例讲述了php使用类继承解决代码重复的问题.分享给大家供大家参考.具体分析如下: 继承直白地说就是给一个类建一个或多个子类,要创建子类就必须在类声明中使用 extends 关键字,新类名在前,extends 在中,父类名在后.   下例中,我们创建两个新类,BookProduct 和Cdproduct ,它们都继承自 ShopProduct 类. 复制代码 代码如下: <?php header('Content-type:text/html;charset=utf-8'); // 从这篇开

Codeigniter购物车类不能添加中文的解决方法_php实例

本文实例讲述了Codeigniter购物车类不能添加中文的解决方法.分享给大家供大家参考.具体分析如下: 有朋友可能会发现Codeigniter 购物车类不能添加中文,我找了N久才发现下面一段代码限制了输入中文了,修改systemlibrariesCart.php,注释第186-190行产品名称的判断,代码如下: 复制代码 代码如下: if ( ! preg_match("/^[".$this->product_name_rules."]+$/i", $ite

php mongodb操作类 带几个简单的例子_php技巧

核心代码: class NewMongodb { private $mongo; //NewMongodb连接 private $curr_db_name; private $curr_table_name; private $error; public $config; public function getInstance($mongo_server, $flag=array()) { static $NewMongodb_arr; if (empty($flag['tag'])) { $f

php基础知识:类与对象(4) 范围解析操作符(::)_php技巧

范围解析操作符(也可称作 Paamayim Nekudotayim)或者更简单地说是一对冒号,可以用于访问静态成员.方法和常量,还可以用于访问被覆盖类中的成员和方法.  当在类的外部访问这些静态成员.方法和常量时,必须使用类的名字. 把 Paamayim Nekudotayim 在希伯莱文就是双冒号的意思.  在类的外部使用 :: 操作符 class MyClass {    const CONST_VALUE = 'A constant value'; } echo MyClass::CONS

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

本文实例讲述了php遍历类中包含的所有元素的方法.分享给大家供大家参考.具体分析如下: 这里可获得php类包含的所有元素以key-value的形式输出 class MyTestClass{ const TESTVAR1 = 1001; const TESTVAR2 = 1002; const TESTSTR1 = 'hello'; } $rc = new ReflectionClass('MyTestClass'); $v = $rc->getConstants(); asort($v);//