【问题标题】:How to get all private var names from a class in PHP? [duplicate]如何从 PHP 中的类中获取所有私有 var 名称? [复制]
【发布时间】:2013-03-30 06:35:28
【问题描述】:

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

我是从父类做的,试图获取子类 vars...

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

class B extends A
{
    private $name;
}

还有其他方法吗?

【问题讨论】:

标签: php


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2021-10-20
        • 1970-01-01
        • 2011-02-04
        • 2013-03-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多