PHP函数`get_object_vars`没有从继承方法获得私有变量

时间:2016-06-27 13:18:52

标签: php

在此示例中,我认为从getVars调用的函数data将能够返回B的私有变量名,因为$this是{{1}的实例}}

而不是它,B返回一个空数组。

  • $this->getVars()调用私有变量是不是可见?
  • 不是get_object_vars一个方法继承到getVars并且被调用就好像是在其中声明的那样?
  • 如何从声明的方法中获取私有变量名称 抽象类?

示例:

B

2 个答案:

答案 0 :(得分:3)

私有属性仅适用于该类的方法。尝试使用受保护的属性来确保继承的方法可以访问它们。

  

可以通过在声明前加上关键字public,protected或private来定义属性或方法的可见性。声明为public的类成员可以随处访问。声明受保护的成员只能在类本身和继承的类中访问。声明为private的成员只能由定义该成员的类访问。

http://php.net/manual/en/language.oop5.visibility.php

答案 1 :(得分:1)

是的,因为get_object_vars对范围敏感。如果您不想更改变量的可见性,请直接从函数get_object_vars调用data()

如果要保持代码继承不变,则必须将变量的可见性更改为受保护。

abstract class A
{
    public function getVars()
    {
        return get_object_vars($this);
    }
}

class B extends A
{
    protected $a;
    protected $b;
    protected $c;

    public function data()
    {
        return $this->getVars();
    }
}

$a = new B();
print_r($a->data());