【发布时间】:2013-03-18 07:51:12
【问题描述】:
$obj = (object)array('a', 'b', 'c');
$refl = new \ReflectionObject($obj);
$props = $refl->getProperties(\ReflectionProperty::IS_PUBLIC | \ReflectionProperty::IS_PROTECTED);
foreach($props as $prop)
print $prop->name;
打印一些奇怪的名称,例如line、file 和line(而不是 1、2、3)。为什么?我意识到名称是无效的,因为它们是数字,但是为什么我会得到这些随机字符串?
get_object_vars($obj) 没有显示任何内容,print_r((array)$obj) 实际上正确打印了值。
如果反射不能显示数字属性,有什么办法可以让它忽略它们?
它也发生在许多 SPL 交互器上(如 ArrayObjects、SplFixedArrays、SplHeaps)。显然这种行为只存在于某些 PHP 5.3 版本中。 PHP 5.4 什么也没显示。
Related PHP bug 和我对解决方案的看法(property_exists 忽略无效名称):
if(version_compare(PHP_VERSION, '5.4') < 0){
$props = array_filter($props, function($prop) use($obj){
return !$prop->isPublic() || property_exists($obj, $prop->name);
});
}
【问题讨论】:
-
ArrayObjects 呢?
标签: php object reflection properties