お世話になります。
データベースで結果を取得する場合など、連想配列のままではなく何故、わざわざオブジェクトに格納する様な手法が使われるのでしょうか?
連想配列のままで処理するほうが早いと思いますし、それに付随するクラスファイルも多くなります。また、「結びつきを緩くして仕様変更に耐えうる様に」など聞きますが、余計複雑になってしまう様な気がしますので、メリットが今ひとつ分からず判断に迷ってしまいます。
どの様な使い分け、考え方をすれば良いかアドバイスいただけたら幸いです。
何卒、宜しくお願いします。
例)
※必要と思われる部分のみ記述しております。
■連想配列
while($row=mysql_fetch_assoc($res)){
~以下必要な処理}
■オブジェクト配列
while($row=mysql_fetch_assoc($res)){
$example = new Example();
$example->setName($row['name']);
$example->setAddr($row['addr']);
$array[] = $example
}
~以下必要な処理
○モデル
class Example
{
private $_name = null;
private $_addr = null;
public function __construct() {}
public function setName($name)
{
$this->_name = (string) $name;
return $this;
}
public function getName()
{
return $this->_name;
}
public function setAddr($addr)
{
$this->_addr = (string) $addr;
}
~以下省略
}
No.1ベストアンサー
- 回答日時:
こういう処理をO/Rマッピングと言いませんか?
O/Rマッピングにはメリット・デメリットがあります。
メリットはざっくり言えば変換後はオブジェクト指向の世界のことだけを考えればよくなるということです。データの取得、設定はsetter / getterで行えますし、一連のデータの受け渡しもオブジェクトの受け渡しとして描かれます。
デメリットはメモリーが無駄に使われて、性能が出ないということに尽きるでしょうね。O/Rマッピングの段階で抽象化されてしまい、RDBのことを綺麗サッパリ忘れるので、RDBだとインデックスを使って高速にデータを選択できるところがそれを使わないために遅くなったり、無駄なメモリーを使ったりすることになります。O/RマッパーによってはSQLを直書きできるオプションを用意しているものもありますが、あまり筋がいいとは思えません。
あと、PHPだと簡単に連想配列を作れるので、わざわざオブジェクトを作ってもあまり嬉しくないかもしれません。JavaだとHashMapなどで連想配列を作るのにもそれなりのコストが掛かりますし、オブジェクトにしたほうが型のチェックもしてくれますのでオブジェクトにする利点はPHPに比べてはるかに大きいとは思いますが。
O/Rマッピングで検索すると賛否両論見つかると思うので、まぁ、見てみてください。個人的にはRDBを裏で使うなら、強く型づけされた言語でもあるまいし、連想配列の配列で良くない?と思ってしまいますが...
hanabutako様
早々のご回答有難う御座います。
> O/Rマッピングと言いませんか?
すみません、出題に入れた方が適切でしたでしょうか。。
なるほど、言語の仕様によるのですね。
何か、何でも「オブジェクト指向で・・・」ってするのが望ましい的な強迫観念?を抱いてしまい、気がつけば、オブジェクト指向、非オブジェクト指向ごちゃごちゃのPGになってしまって悲しい限りです(恥)
>O/Rマッピングで検索すると
有難う御座います。
はい、沢山出てきますね、、ActiveRecordとかデータマッパーとか・・・
色々ありすぎて訳分からなくなってしまいそうです。。
でも、hanabutako様に「連想配列の配列で良くない?」と言われますと、背中を押して下さった様な気がしますので、踏ん切りがつきました。
変に気張らずに「連想配列」を使用したいと思います。
有難う御座いました。
今後とも宜しくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP 配列の値の更新方法について 1 2022/08/05 09:49
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
- JavaScript gasについて 1 2022/05/31 21:51
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
- JavaScript Javascript初心者|jQueryの.val()で値を取得し複数の要素を連結させる方法知りたい 2 2022/06/02 12:06
- C言語・C++・C# C++プログラミングコードにポリモーフィズムを取り入れ方を教えてください。 2 2023/06/09 11:17
- Java java final 1 2022/06/10 22:49
- JavaScript EasyUIのSubGrid(jquery)におけるObjectに入れた連想配列について 1 2022/05/02 11:21
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルVBAについて
-
PHPでMY SQLの連想配列をリンク...
-
phpでmysqlを使ってデータベー...
-
アラートでyes noを作りたいです。
-
SQLのSUM関数で取得した値を参...
-
連想配列、オブジェクト配列の...
-
mysql_fetch_objectの書き方を...
-
DBで検索結果に該当するデータ...
-
phpとSQLでアクセスカウンタと...
-
phpでデータリスト作成
-
php 投票システム
-
PHPで[]の使い方について
-
トランザクション処理
-
VBAをつかってクエリの情報を抽...
-
実行時エラー3131 FROM 句の構...
-
PHP + MySQLを使用して詳細画面...
-
クエリObjectをforeachで回す時...
-
php データ削除
-
SQLインジェクション対策
-
Q&Aサイトを作成していてURLの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PHPで[]の使い方について
-
php テーブルが作成できない
-
dbに登録したデータをphpのプル...
-
アラートでyes noを作りたいです。
-
phpでmysqlを使ってデータベー...
-
DBで検索結果に該当するデータ...
-
文字化けが解決できません。お...
-
SELECT結果から動的にコンボボ...
-
checkboxクリック時、SQLを実行...
-
PHPでMySQLデータを呼び出し、w...
-
while文の中にwhile文を書きた...
-
sortable ギブアップです…助け...
-
重複レコードをグループ化した...
-
PHP と MySQL でテーブルの行数...
-
PHPでMySQLのデータを2次元配...
-
mysql>PHPにデータ表示、10件ご...
-
PHPについてなのですが未定義の...
-
VBA初心者です。
-
ラジオボタンをループすること...
-
PHP+MySQLでの配列のinsert文に...
おすすめ情報