2011-02-06 39 views
3

我未能通过PHP的反射来获取动态的实例变量未能通过PHP的反射

示例代码以获得动态的实例变量:

<?php 

class Foo 
{ 
    public function bar() 
    {   
     $reflect = new ReflectionClass($this); 
     $props = $reflect->getProperties(); 
     var_export($props); 
     die; 
    } 
} 

$foo = new Foo(); 
$foo->a = "a"; 
$foo->b = "b"; 

$foo->bar(); // Failed to print out variable a and b 

任何想法?

回答

5

ReflectionClass::getProperties()只获得属性明确定义由类。为了反映您在对象上设置的所有属性,使用ReflectionObjectReflectionClass继承和工作在运行时实例:

$reflect = new ReflectionObject($this); 

或者为Tim Cooper says,忘记反省和只使用get_object_vars()代替。

3

在这种情况下,您不能使用ReflectionClass。用以下内容替换您的$props变量,使其工作:

$props = get_object_vars($this); 

如果您需要从ReflectionObject调用(见BoltClock's answer)没有其他的方法,那么这是最简单的解决方案。

+1

祝贺3k rep :) – BoltClock 2011-02-06 16:36:23

+0

@BoltClock时间快走吧 – Peter 2017-05-17 15:05:45