記事一覧はこちら

json_decodeの強力すぎる第二引数

php連想配列とオブジェクトを使い分けたデータを、json_encodeで保存してjson_decodeで読み込むと、両方json_decodeの第二引数の型に変換されます。
あえて揃えたい場合は再帰的な変換方法でいいんだけど、あえて使い分けてる時はどうしたもんか。
連想配列の利点
$arr="new";で値を追加出来る。
つまりキー無しで連続した値を収納可能。(実際は0、1,2と数字のキーが付いてるけど意識はされないし)。
関数に渡す時に値渡しになる。
$arr1=$arr2+$arr3;で合成的な事が出来る。オブジェクトは出来ない



オブジェクトの利点
$obj->hogeで値にアクセス出来る。 $arr="new";みたいな事が出来ない。
と言うかキー無しで順番にある値という事が出来ない。
関数に渡す時に参照渡しになる。



一長一短ですなあ。いやそもそも比べるようなもんじゃないことはわかってるんだけど。
んーでも値を突っ込んでおくだけなら連想配列かなあ。参照渡しもデフォルトじゃないってだけで普通に出来るし。
じゃあなんでオブジェクトを使うかって言うと、$a->bのアクセス方法が書きやすいから!
$a["b"]はタイプ数が倍になるのは言うまでもないし、カーソルをキー名の頭と尻の両方に移動させないといけないのがまためんどい。変数の中で{$a["b"]}がしたい時はシングルクォーテーションに書き変えないといけないし いやそれは普段からシングルクォーテーションで書いておけばいいんだけどさ。
つーかjavascriptはa["b"]とa.bはどっちでもいいんだよなあ。でもphpでピリオドは使っちゃってるから出来ないよなあ。なかなかうまくいかないもんだ。