如何在PHP中获取类的所有私有变量名称?

3

get_class_vars 函数可以获取所有公共变量,但我想访问私有变量。

我正在从父类尝试获取子类变量...

class A
{
    function getvars()
    {
        /* get private vars from child */
    }
}

class B extends A
{
    private $name;
}

还有其他方法可以实现这个吗?


如果你想要访问变量,为什么要将它们设为private - mario
3个回答

11

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

这是PHP文档:

http://www.php.net/manual/zh/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方法中的过滤器,或者完全省略它(这里我仅显示了私有过滤器)。


5
使用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();

1
如果需要,将其声明为protected,这样您就可以直接访问父类和扩展类中的属性。
另一种方法是在引入此属性的类中定义protected/public getter/setter函数。
最困难的方法是在父类中使用ReflectionObject$this进行操作,以获取私有属性列表并更改其可访问性

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接