$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)
이 올바르게 값을 인쇄합니다.
Reflection에서 숫자 속성을 표시 할 수없는 경우 수정할 수있는 방법이 있습니까?
그것은 또한 많은 SPL interators (같은 ArrayObject
의, SplFixedArray
의, SplHeap
들)에 발생합니다. 분명히이 동작은 일부 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는 어떻습니까? – sectus