它似乎不工作:
$ref = new ReflectionObject($obj);
if($ref->hasProperty('privateProperty')){
print_r($ref->getProperty('privateProperty'));
}
它进入了IF循环,然后抛出一个错误:
物业privateProperty不存在
:|
$ref = new ReflectionProperty($obj, 'privateProperty')
也不管用...
该文档页面列出了一些常量,包括IS_PRIVATE
。 我该怎样才能使用,如果我无法访问私有财产笑?
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));
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);