【追記】
- $foo->$barとするだけで参照プロパティを切り替えられる
- 確かに第二引数でtrueを渡せば連想配列になる
【この記事を一言で言うと】
- $hoge = json_decode($json);で作られたオブジェクト(stdClass)
- $hoge->$foo->$barでアクセス。
- $hoge = json_decode($json, true);で作られたオブジェクト(連想配列)
- $hoge['foo']['bar'];でアクセス。
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
にゃー
引数渡さずにjson_decodeするとstdClassでデータ構造が作られる。
第二引数でtrue渡せば連想配列でデータ構造が作られる。
// stdClassのメンバへアクセス方法 $hoge = json_decode($json); echo $hoge->foo->bar; // 連想配列へのアクセス方法 $hoge = json_decode($json, true); echo $hoge['foo']['bar']; */
連想配列でアクセスできると何が嬉しいのか
keyを変数で指定できる。
カッコ記法なら、keyを変数で指定できるためロジックで参照する変数を変えれる!
が、stdClassのメンバへ「->」ってアクセスする方法だと、(多分)リテラルでしかアクセス出来ないのでめんどい。ロジックで参照するメンバを動的に変える、っていうのはどうにかして出来る気はするんだけど、そんな事するより連想配列を使ったほうがふるゆわで楽チン。
上の例だと
$hoge->foo->bar;
のfooを動的に変えたい場合、stdClassだとぶっちゃけどうやるか分かんない…
$key = "foo"; $hoge[$key]['bar'];
なら$keyを動的に変えて、見に行く変数を変えることが出来る。
アクセッサー作ったりしてどうにかやる事はできると思うが、めんどーい。
筋の良いコーディング
PHP先輩なにげに上手くやらないとめんどすなカンジがするので、筋のいい情報、ベストプラクティスなやり方を身に着けておきたーい。
そしてなんか体調悪いな!
風邪うつった?
もう少し頑張るつもりだったけど、帰って寝よう!