似乎不起作用:
$ref = new ReflectionObject($obj);
if($ref->hasProperty('privateProperty')){
print_r($ref->getProperty('privateProperty'));
}
它进入IF循环,然后抛出一个错误:
属性privateProperty不存在
:|$ref = new ReflectionProperty($obj, 'privateProperty')
也不起作用...
documentation page列出了一些常量,包括IS_PRIVATE
,如果我不能访问私有属性,我怎么能使用它呢?
5条答案
按热度按时间kyks70gy1#
更新:自PHP 8.1.0起,调用ReflectionProperty::setAccessible方法无效;默认情况下,所有属性都是可访问的。
czq61nw12#
请注意,如果您需要获取来自父类的私有属性的值,则可接受的答案无效。
为此,您可以依赖getParentClass method of Reflection API。
而且,这个问题已经在this micro-library中得到了解决。
更多详情请参见this blog post。
jfewjypa3#
getProperty
抛出的是异常,不是错误,意义在于,你可以处理,给自己保存一个if
:要获取所有私有属性,请使用
$ref->getProperties(ReflectionProperty::IS_PRIVATE);
8yoxcaq74#
如果你需要它没有反射:
然后像这样(在同一个类中)使用它:
m3eecexj5#
然后就像
应该行得通。
这是尼古拉·斯托伊利科维奇答案的简化版本