我可以通过Reflections获得私有财产的价值吗?

2022-08-30 13:36:03

它似乎不起作用:

$ref = new ReflectionObject($obj);

if($ref->hasProperty('privateProperty')){
  print_r($ref->getProperty('privateProperty'));
}

它进入 IF 循环,然后引发错误:

属性私有属性不存在

:|

$ref = new ReflectionProperty($obj, 'privateProperty')也不起作用...

文档页面列出了一些常量,包括 。如果我无法访问私有财产,我怎么能使用它呢?IS_PRIVATE


答案 1
class A
{
    private $b = 'c';
}

$obj = new A();

$r = new ReflectionObject($obj);
$p = $r->getProperty('b');
$p->setAccessible(true); // <--- you set the property to public before you read the value

var_dump($p->getValue($obj));

答案 2

请注意,如果您需要获取来自父类的私有属性的值,则接受的答案将不起作用。

为此,您可以依靠反射 API 的 getParentClass 方法

此外,这个微库中已经解决了这个问题。

有关更多详细信息,请参阅此博客文章


推荐