【问题标题】:php, how to get all private variables EXCEPT inherited ones?php,如何获取除继承的所有私有变量?
【发布时间】:2017-07-20 16:48:12
【问题描述】:
Class A
{
    Private $a;
}

Class B extends A
{
    Private $b;

    Public function list()
    {
        Var_dump($this);
    }

(New B())->list()

它会打印来自A 的变量。我只想从B 获取变量。怎么做?

【问题讨论】:

标签: php reflection


【解决方案1】:

使用反射可以做到这一点,例如:

Class A
{
    Private $a;
    Protected $e;
}

Class B extends A
{
    Private $b;
    Private $d;

    Protected $c;

    Public function list()
    {
        $ref = new ReflectionClass(__CLASS__);
        $ownProps = array_filter($ref->getProperties(), function($property) {
            return $property->class == __CLASS__ && $property->isPrivate();
        });

        print_r($ownProps);
    }
}

(New B())->list();

输出:

Array
(
    [0] => ReflectionProperty Object
        (
            [name] => b
            [class] => B
        )

    [1] => ReflectionProperty Object
        (
            [name] => d
            [class] => B
        )

)

【讨论】:

  • 是的,很好。如果你在 getProperties() 中通过 ReflectionProperty::IS_PRIVATE 过滤并跳过 ->isPrivate() 方法,它会变得快两倍
猜你喜欢
  • 2014-11-17
  • 2014-04-06
  • 1970-01-01
  • 2018-09-19
  • 2016-07-15
  • 2012-12-03
  • 2012-10-31
  • 2011-04-06
  • 2015-09-14
相关资源
最近更新 更多