$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 インターレーター ( ArrayObject
s、SplFixedArray
s、SplHeap
s など) でも発生します。どうやら、この動作は一部の PHP 5.3 バージョンにのみ存在します。PHP 5.4 では何も表示されません。
関連する PHP のバグと私の解決策 (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);
});
}