访问类外部的受保护成员变量

2022-08-30 22:37:08

我通过访问某人已经放置的类函数来查询字段的ID。结果是返回了一个包含受保护成员变量的对象。我正在努力了解如何访问类外的成员变量值。


答案 1

从公共访问受保护或私有变量是不正确的(这就是为什么它们是受保护的或私有的)。因此,更好的是扩展类并访问所需的属性,或者使getter方法公开获取它。但是,如果您仍然想在不扩展的情况下获取属性,并且如果您使用的是 PHP 5,则可以使用 Reflection 类进行访问。实际上尝试反射属性类。

class Foo { protected $bar; }
$foo = new Foo();

$rp = new ReflectionProperty('Foo', 'bar');
$rp->setAccessible(true);
echo $rp->getValue($foo);

答案 2

这是正确的答案:

我们可以使用闭包类的 bind() 或 bindTo 方法来访问某个类的私有/受保护数据,例如:

class MyClass {
          protected $variable = 'I am protected variable!';
}

$closure = function() {
          return $this->variable;
};

$result = Closure::bind($closure, new MyClass(), 'MyClass');
echo $result(); // I am protected variable!

推荐