如何从PHP中的类中获取所有私有var名称?

时间:2013-03-29 22:10:44

标签: php

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

我是从父类做的,试图获得子类变量...

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

class B extends A
{
    private $name;
}

还有其他方法吗?

3 个答案:

答案 0 :(得分:5)

我建议使用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方法上的过滤器或完全省略它(此处我已将过滤器仅显示为私有)。

答案 1 :(得分:3)

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

答案 2 :(得分:1)

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

其他方法是在类中引入此属性来定义protected / public getter / setter函数。

最难的是在父类的$this上使用ReflectionObject获取私有属性列表并change their accessibility