- ベストアンサー
フレームワークのクラス
連想配列とオブジェクトの決定的な違いってなんですか? laravelというフレームワークを使っているのですが、フレームワークは基本クラスのオブジェクトに情報を格納してますよね? それは連想配列でも可能なわけで・・・ 連想配列よりオブジェクトの方が便利なのでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
設計思想の問題なので、どちらでもよいとは思います。 ただ、最近のIDEなどの統合開発環境のパワーを十全に生かすならオブジェクトのほうが便利です。 というのも、VSCodeで「PHP Intelephense」などの入力補完するエクステンションなどを使っている場合、 連想配列は入力補完が聞かないですが、オブジェクトのプロパティなんかは入力補完が効いたりします。 後は、もう少し具体的にどんなところに違和感(というか面倒くささ?)を感じたか、によるのかな、と思います。 そそれが、今回例示されているようなLaravelのEloquentモデル固有の問題なのであれば、以下のようなことも一応できます。 例えば自分でコントローラで操作するにあたっては連想配列を使いたい場合 <?php // Flightというのは、flightsテーブルのモデルだと思ってください。 /*================================================ * データを取得する場合 *================================================ $flights = Flight::all()->toArray(); // toArrayメソッドで連想配列に変換 /*================================================ * POST値など何らかのデータを作って保存したい場合 *================================================ $data = ['key1' => 'なんらかのあたい', 'key2' => 'なんらかのあたい']; // オブジェクトを作って $flight = new Flight($data); // 保存する $flight->save(); // または配列をそのまま保存 $flight = Flight::create($data); // ※ Flight(モデル)にメンバ変数fillableが必要 ?> また、Eloquentには、アクセサ/ミューテータ、といった便利機能とか、色々詰まっているので、 使いこなしていくと、もう少し身近に感じられるかもしれません。
その他の回答 (2)
- t_ohta
- ベストアンサー率38% (5238/13705)
配列変数は値を入れる入れ物です。 クラスオブジェクトは値だけで無く、関数も入ってますし、値を入れることで連動して他の値を変えたり複雑なことも出来ます。
- AsarKingChang
- ベストアンサー率46% (3467/7474)
んま~セッターゲッターをするって考えたら、オブジェクトでしょうか。 連想配列だと、 abc['low']=50 ; と直接入れちゃいますが、 実はこれが、最大値32まででした?ってことなら、 クラスオブジェクトとして、 abc.setLow(50); //スネチェならset_lowとかでも。 みたいな関数にして、パラメタがvだと仮定すると、 if (v>32) v=32; this.low=v; みたいな、バリデーションが自動的に行えるメリットはあるかもです。 同じように、あるゲッターは、A+Bをやってるよ?ってことだと、 連想配列だと、きついのでこれらも、クラスオブジェクトとした方が いいかもで、その辺の違いで分けてもいいかもですね。 なんですが、連想配列でも、関数オブジェクトを書くことができるので、 じゃ~違いは?って言われると、オブジェクトポインタかな~ って感じることがありますが。 C/C++言語やってた人だと、 変数だけをたくさん入れた物が、struct で、 関数をまとめた物(変数を混ぜてもOK)が class って感覚があるので、 それで分けてますね。PHPやってたとしても。 やや意見っぽくなっちゃいました^^ ひとまず、セッターゲッターがあるなら、クラスオブジェクトでいいかな~ ってのはあると思います。
お礼
ありがとうございました
お礼
詳しくありがとうございました