忍者ブログ
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。



2017/10/17 14:49 |
PHP5.4.7 オブジェクトの数値キーにアクセスしたい
http://bloggdgd.blog28.fc2.com/blog-entry-264.html
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


2013/08/19 23:27 | Comments(0) | PHP

コメント

コメントを投稿する






Vodafone絵文字 i-mode絵文字 Ezweb絵文字 (絵文字)



<<PHP5.5.0 「第13回オフラインリアルタイムどう書くの参考問題」をPHPで解く | HOME | 買ったものリスト 2013/08/18>>
忍者ブログ[PR]