PHPでOOP (894レス)
PHPでOOP http://medaka.5ch.net/test/read.cgi/php/1172205352/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
191: nobodyさん [sage] 2008/01/31(木) 19:08:05 ID:??? >>190 自分で考えるのも良いが、君が今やっていることを やってしまっているのが、フレームワークだ。 まず既存のフレームワークがどうなっているのか参考しろ。 http://medaka.5ch.net/test/read.cgi/php/1172205352/191
192: nobodyさん [sage] 2008/01/31(木) 19:44:25 ID:??? 俺も初心者だからこれが最善とは言い切れないけど newするときに全部引数で渡すってのはナシじゃね? 分かりやすいところだけ書き出すと [index.php] $form = new CFControll(); [cfcontrol.php] コンストラクタ() { $form_str = $_POST['form']; $in_str = $_POST['key']; if(inだったら){ $view = new CFView(); $view->m_type = 'in'; $view->Write_HTML(); } } [cfview.php] メンバ変数 var $m_file = 'index.php'; var $m_type = false; var $m_line = null; http://medaka.5ch.net/test/read.cgi/php/1172205352/192
193: 192 [sage] 2008/01/31(木) 19:50:52 ID:??? フレームワーク使ってみろっていうのは賛成 疎結合にとかDRYにっていうのがだんだんわかってきた 理解したところで戻ってきて〜の方が結果的に早そう 俺はまだ勉強中だからそこまで行ってないけど http://medaka.5ch.net/test/read.cgi/php/1172205352/193
194: に ◆lKs5QMUHoA [sage] 2008/01/31(木) 19:56:23 ID:??? >>192 > $view = new CFView(); > $view->m_type = 'in'; これみたいに、直接メンバにアクセスするのは構造的に良くないと聞いたことが あるよ。「データをやり取りするのは、インターフェースを通じて」という原則を 守るべきだと。 そうしなければ、CFViewクラスを改変する人は、そのクラスを使っている人の コードを考慮して、メンバの値や変数名を自由に変える事が出来なくなるから。 なので、私は、コンストラクタで値を渡しても良いし、コンストラクタで値を渡して いなければ、値を渡すためのインターフェースを使って渡すようにする仕様が 適当かなと思っている。 http://medaka.5ch.net/test/read.cgi/php/1172205352/194
195: 192 [sage] 2008/01/31(木) 20:08:35 ID:??? 汚染されちゃうけどコンストラクタで全部の値渡すよりはましじゃないかなあ あとコンパイルするときに全部チェックしてくれる言語とそうじゃない言語ってのもある phpなんだしゆるーくやればいいじゃん なんていうと怒られるかw http://medaka.5ch.net/test/read.cgi/php/1172205352/195
196: に ◆lKs5QMUHoA [sage] 2008/01/31(木) 20:13:09 ID:??? 今調べて知ったのだが、オーバーロードは PHP ではできないらしい。 だったら、コンストラクタで値を渡すよりも、インターフェースで値を 設定するような仕組みになるだろうね。 コンストラクタだと、一度値を設定したら、そのオブジェクトが破棄される まで、再度設定が出来なくなるから。 http://medaka.5ch.net/test/read.cgi/php/1172205352/196
197: nobodyさん [sage] 2008/01/31(木) 20:22:00 ID:??? メンバ変数へのアクセスはsetter/getterを使う。これは議論の余地なし。 それを用意した上でコンストラクタに引数を渡すなら渡せば良い。 複雑で多くの設定をしなきゃならない時以外、 newした直後に使える状態になっている方が使いやすい。 > $view = new CFView(); > $view->m_type = 'in'; これをセットで書かなきゃならないなら、 > $view = new CFView('in'); と書きたい。 http://medaka.5ch.net/test/read.cgi/php/1172205352/197
198: に ◆lKs5QMUHoA [sage] 2008/01/31(木) 20:26:00 ID:??? 私は>>197さんの意見に同意だ。 「このモジュールを使う場合、このように書いてくださいね。」 というコードは、なるべく少ない方がいいからね。 なので、とりあえず設定の値はコンストラクタにいれるという 設計で書いてみた。 http://medaka.5ch.net/test/read.cgi/php/1172205352/198
199: に ◆lKs5QMUHoA [sage] 2008/01/31(木) 20:31:34 ID:??? とりあえず、フレームワークを使ってみろという話が出ているが、 具体的にどのフレームワークを使って、どんなプログラムを書いて みたらいいのか迷うなぁ。 とりあえずはこのあたりに載ってるものの、「和モノ」あたりからかな。 http://pc11.2ch.net/test/read.cgi/php/1197383840/3 フレームワーク自体の自作の話もいくつかあるみたいだ。 ttp://codezine.jp/a/article.aspx?aid=104 http://medaka.5ch.net/test/read.cgi/php/1172205352/199
200: 192 [sage] 2008/01/31(木) 20:36:05 ID:??? viewに渡すデータはセッタで渡したくならない? あとinなのかoutなのか分岐させるとしたらそれはコントローラ側の仕事なんじゃないかなと思うんだけど違うかな http://medaka.5ch.net/test/read.cgi/php/1172205352/200
201: 192 [sage] 2008/01/31(木) 20:42:33 ID:??? いや、見直したらそう書いてた ごめん気にしないで http://medaka.5ch.net/test/read.cgi/php/1172205352/201
202: に ◆lKs5QMUHoA [sage] 2008/01/31(木) 20:46:31 ID:??? >>200 > viewに渡すデータはセッタで渡したくならない? 表示させるデータはセッタがいいだろうね。 > あとinなのかoutなのか分岐させるとしたらそれはコントローラ側の > 仕事なんじゃないかなと思うんだけど違うかな >>185のソースがそれにあたるものだと思ってたけど。 if( ($form_str == "")or($form_str == "in") ){ 省略 }elseif($form_str == "out"){ 省略 } コントローラは、POSTしてきた値を見て、必要なModelやViewを 選択し、実行する役割なので、それを実現したつもり。 http://medaka.5ch.net/test/read.cgi/php/1172205352/202
203: に ◆lKs5QMUHoA [sage] 2008/01/31(木) 21:58:27 ID:??? 厳密にMVCを分けることは出来ない場合もあるということだけど、 CFControlクラスで、CFViewを使って表示する内容までもを 指定していする処理を書いていたのは間違いかな? 検索結果の表示や、データの更新の場合は、 Control→Model→View だけど、 ボタンを押した時の画面の展開のみの場合は、 Contol→View という流れとなり、Viewオブジェクトを 生成するクラスが異なるという処理でいいのかな? http://medaka.5ch.net/test/read.cgi/php/1172205352/203
204: に ◆lKs5QMUHoA [sage] 2008/02/01(金) 07:38:53 ID:??? 「とりあえずはフレームワークを使ってみろ」という返事がきそうだけど、 各クラスの役割は以下のような感じでいいかな? Control ・POSTでデータを受け取り、その値に不正なものが無いかをチェック。 ・変なところからのアクセスではないかをチェック。 ・$_POST["Form"]の値をみて、それに必要な画面と処理を判断する。 Model ・SQLを発行し、データを受け取る。 ・データをViewクラスに渡す。 View ・フォームを表示する。(フォームごとにクラスを分けたほうがいいのかは迷うな) ・データを1件受け取り、tableタグでレイアウトを調整し、表示する。 http://medaka.5ch.net/test/read.cgi/php/1172205352/204
205: nobodyさん [sage] 2008/02/01(金) 09:44:17 ID:??? とりあえずはフレームワークを使ってみろ http://medaka.5ch.net/test/read.cgi/php/1172205352/205
206: nobodyさん [sage] 2008/02/01(金) 11:08:23 ID:??? 自分なりに調べて見つけたPHPのサンプルを使った解説ページも 読むとwebアプリについて学べるのではないかと思っている。 やることが多くなったけれど、とりあえずは以下の3本だてで 勉強してみることになるのかな。 MVCに分けて、簡単なアプリを自作する。 (ログイン、メニュー、検索条件指定、検索結果、データ編集などの画面があるもの) 和モノフレームワークを使って学ぶ。 簡単なアプリを自作する。 http://pc11.2ch.net/test/read.cgi/php/1197383840/3 サンプルで理解! フォームデータの受け渡し ttp://www.atmarkit.co.jp/flinux/rensai/mysql5_03/mysql5_03a.html http://medaka.5ch.net/test/read.cgi/php/1172205352/206
207: nobodyさん [sage] 2008/02/01(金) 12:06:10 ID:??? ちいたんのソース見てみたけれど、 class CObject ってあって、必ずそれが継承されて作られてるよね。 これの都合って何なんだろう。(メリットは何?) javaも.NETもこういう基本クラスがあるよね。 http://medaka.5ch.net/test/read.cgi/php/1172205352/207
208: nobodyさん [sage] 2008/02/01(金) 12:19:15 ID:??? 全部のクラスに共通するメソッド等が実装できる http://medaka.5ch.net/test/read.cgi/php/1172205352/208
209: nobodyさん [sage] 2008/02/01(金) 13:06:22 ID:??? >>208 サンクス。 でも、オーバーロードが出来ない場合は逆に足かせになる可能性もあるね。 例えば、継承されているクラスが沢山ある状況でObjectクラスに メソッドを追加する場合とか。 http://medaka.5ch.net/test/read.cgi/php/1172205352/209
210: nobodyさん [sage] 2008/02/01(金) 16:28:22 ID:??? 喋るのはコントローラとモデル コントローラとビュー 基本的にはね http://medaka.5ch.net/test/read.cgi/php/1172205352/210
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 684 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
2.117s*