3

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

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

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

class B extends A
{
    private $name;
}

还有另一种方法可以做到这一点吗?

4

3 回答 3

8

我建议使用 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 方法上的过滤器或完全省略它(这里我只显示了私有过滤器)。

于 2013-03-29T22:16:59.613 回答
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();
于 2013-03-29T22:35:28.330 回答
1

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

另一种方法是在引入此属性的类中定义受保护/公共 getter/setter 函数。

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

于 2013-03-29T22:14:03.267 回答