如何从PHP中的一个类中获取所有私有变量名


How to get all private var names from a class in PHP?

get_class_vars获得所有公共变量,但我想访问私有变量。

我正在做它从一个父类,试图得到子类变量…

class A
{
    function getvars()
    {
        /* get private vars from child */
    }
}
class B extends A
{
    private $name;
}

是否有其他方法可以做到这一点?

我建议使用PHP的ReflectionClass。特别是getProperties()呼叫。

下面是PHP文档:

http://www.php.net/manual/en/reflectionclass.getproperties.php

示例如下:

class A
{
    function getvars()
    {
        $reflection = new ReflectionClass($this);
        $vars = $reflection->getProperties(ReflectionProperty::IS_PRIVATE);
        var_dump($vars);
    }
}
class B extends A
{
    private $name;
}

还要注意,您可以更改getProperties方法上的过滤器,或者完全省略它(这里我只展示了private的过滤器)。

使用ReflectionClass将它们放到数组中。然后你就可以为所欲为了。在屏幕上打印他们的名字的示例代码。

class TestPrivate {
    public $var1;
    public $var2;
    public $var3;
    private $var4;
    private $var5;
    public $var6;
    public function getPrivateVars() {
        $reflect = new ReflectionClass(__CLASS__);
        $vars = $reflect->getProperties(ReflectionProperty::IS_PRIVATE);
        foreach ($vars as $privateVar) {
            echo $privateVar->getName() . "<br />";
        }               
    }
}   

$instance = new TestPrivate();
$instance->getPrivateVars();

如果需要,可以将其声明为protected,这样就可以直接访问父类和扩展类中的属性。

另一种方法是在类中定义protected/public getter/setter函数来引入这个属性。

最难的是在父类的$this上使用ReflectionObject来获取私有属性列表并改变它们的可访问性