我可以得到反思私有财产的价值?(Can I get the value of a private p

2019-06-17 12:19发布

它似乎不工作:

$ref = new ReflectionObject($obj);

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

它进入了IF循环,然后抛出一个错误:

物业privateProperty不存在

:|

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

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

Answer 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));


Answer 2:

getProperty抛出一个异常,而不是错误。 其意义在于,你可以处理它,并保存自己的if

$ref = new ReflectionObject($obj);
$propName = "myProperty";
try {
  $prop = $ref->getProperty($propName);
} catch (ReflectionException $ex) {
  echo "property $propName does not exist";
  //or echo the exception message: echo $ex->getMessage();
}

为了让所有的私人属性,使用$ref->getProperties(IS_PRIVATE);



文章来源: Can I get the value of a private property with Reflection?