http://bloggdgd.blog28.fc2.com/blog-entry-264.html
http://fushi.x0.com/blog/archives/828
プロパティ「"A"」には$obj->Aでアクセスできますが、プロパティ「0」にはどうやってもアクセスできねーよ、というお話。
まあキャストしてるから(array)と一緒だろ、と言われればそのとおりですが。
実はここからがわりと愉快で深刻な話になります。
http://fushi.x0.com/blog/archives/828
<?php $arr = array('0'=>'zero', 'A'=>'B'); $obj = (object)$arr; var_dump($obj);
object(stdClass)#1 (2) { [0]=> string(4) "zero" ["A"]=> string(1) "B" }objectにキャストした結果、"zero"のキーが何故か数値になっています。
プロパティ「"A"」には$obj->Aでアクセスできますが、プロパティ「0」にはどうやってもアクセスできねーよ、というお話。
$arrayObject = new ArrayObject($obj, ArrayObject::ARRAY_AS_PROPS); print($arrayObject[0]); // zeroできました。
まあキャストしてるから(array)と一緒だろ、と言われればそのとおりですが。
実はここからがわりと愉快で深刻な話になります。
<?php $arr = array('0'=>'zero'); $obj = (object)$arr; // [0]になる $obj->{0} = 'hoge'; // 実際は["0"]に入る // ArrayObjectは全て"zero" $arrayObject = new ArrayObject($obj, ArrayObject::ARRAY_AS_PROPS); var_dump($arrayObject[0], $arrayObject['0'], $arrayObject->{0}, $arrayObject->{'0'}); // 配列はどちらも"zero" $arr = (array)$iter; var_dump($arr[0], $arr['0']); // stdClassは何故か"hoge" $obj = (object)$arr; var_dump($obj->{0}, $obj->{'0'});うむ、意味が分からない。
PR