PHPの謎バグ

PHPでオブジェクトを配列にキャストする場合、Object $objを$array = (array)$objみたいにキャストすると、$obj->propが$array[‘prop’]になるわけだけど、JSONで渡ってきた値をphpのjson_decodeでデコードしたオブジェクトをこのキャストした場合・・・

配列をvar_dumpしたときに

‘1’=>’北海道’
‘2’=>’青森’

みたいになるんで、$array[‘1’]にアクセスすると当然’北海道’が戻ってくるべきなんだけど、$array[‘1’]でも$array[1]でもnullが戻ってきてアクセス不能になるという謎現象に陥った。

$temporary = array();
foreach($array as $key=>$val){
$temporary[$key] = $val;
}

みたいな無駄な処理を通すと、$temporary[1]にアクセスすると’北海道’ が得られるようになった。

どうも、PHPの内部処理で型キャストで配列を作る場合に内部構造がおかしくなって、連想配列と数値インデックスの単純配列の動きがおかしくなってしまうようだ。

(9)


カテゴリー: PHP   パーマリンク

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です