PHPでOOP (894レス)
PHPでOOP http://medaka.5ch.io/test/read.cgi/php/1172205352/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
416: nobodyさん [sage] 2008/02/14(木) 16:13:08 ID:??? >>415 >なんで「そのオブジェクトはいつでも SQLを実行できてしまう」のが悪いのかわからないけど、 DBなんて巨大なグローバル変数の固まりみたいなものだし、アクセスもメモリと比べて遅いし、 トランザクションの都合からもある範囲でDBアクセスしている可能性がないかが 簡単に見分けられないのは怖いと思うけど。 http://medaka.5ch.io/test/read.cgi/php/1172205352/416
417: 412 [sage] 2008/02/14(木) 16:13:24 ID:??? >>414 > なら、searchメソッドは、staticなり外部に置くのではないかと思う。 あー。staticでいいです。単に個人的な環境の理由から PHP4を使っていて忘れていただけです。 http://medaka.5ch.io/test/read.cgi/php/1172205352/417
418: 412 [sage] 2008/02/14(木) 16:17:15 ID:??? >>416 でもどっちみちデータベースに操作を出来るところなら、 コネクション知っているわけで、結局同じことでしょ? それにクラスの変数はグローバル変数じゃないからw http://medaka.5ch.io/test/read.cgi/php/1172205352/418
419: nobodyさん [sage] 2008/02/14(木) 16:33:55 ID:??? >>418 必要なメソッドにしか connection を渡さず、オブジェクト内に保存しないことで、 「データベースに操作できるところ」を限定するという話。 connection をDBアクセスする権限と見るならば、その権限は処理に対して与えるべきで、 オブジェクトに対して与えるべきではないだろうということ。 http://medaka.5ch.io/test/read.cgi/php/1172205352/419
420: nobodyさん [sage] 2008/02/14(木) 17:56:06 ID:??? DB周りはZendFrameworkの実装でなんら不満ないなあ。 http://medaka.5ch.io/test/read.cgi/php/1172205352/420
421: 412 [sage] 2008/02/14(木) 18:14:31 ID:??? >>419 しかし、テーブルに関するクラスでデータベースを操作しないメソッドって あまりないからなぁ。まあ別にいいけどね。 http://medaka.5ch.io/test/read.cgi/php/1172205352/421
422: nobodyさん [sage] 2008/02/14(木) 18:51:49 ID:??? >>421 例えば Personテーブルに depart_codeがあるとして、$person->getDepartName() としたときに、 暗黙のうちにdepart_codeをキーとしてDepartテーブルから検索する SQLが実行されたら嫌だし、 setPersonNameされたときに、そのタイミングでupdateが実行されていないか疑わなきゃいけないのも嫌。 http://medaka.5ch.io/test/read.cgi/php/1172205352/422
423: nobodyさん [sage] 2008/02/14(木) 19:13:43 ID:??? >>422 メソッドの実装がどうなってようが呼んだ方の知ったこっちゃないだろ。 そのどっちの例もそのクラスの仕様なんだから。 それを外側から知ろうとか制御しようだなんておかしな話だ。 http://medaka.5ch.io/test/read.cgi/php/1172205352/423
424: nobodyさん [sage] 2008/02/14(木) 19:41:54 ID:??? そもそもstaticも存在しないPHP4で機能をまとめたようなクラス(CDB_PostgreSQLクラスみたいなの) を作ろうとしてるのが気持ち悪い。 しかもOOPなんてデータベースの各要素に関数をくっつけたようなもんなんだから既存のデータを単体でしか扱わない データベースと相性が悪いのは分かりきったことだろう。 http://medaka.5ch.io/test/read.cgi/php/1172205352/424
425: nobodyさん [sage] 2008/02/14(木) 19:54:36 ID:??? OOPはデータベースの各要素に関数をくっつけたようなもの? 既存のデータベースはデータを単体でしか扱わない? だからOOPとデータベースと相性が悪い? ( ゚Д゚) ワカラナイ http://medaka.5ch.io/test/read.cgi/php/1172205352/425
426: 412 [sage] 2008/02/14(木) 20:04:12 ID:??? >>424 staticはあくまでstaticだよと明示しているだけで 本質的には必要なものとは思えないけど。便利だけどね。 それと、CDB_PostgreSQLは「機能をまとめたクラス」ではないよ。 たとえば一つのアプリでサーバー負荷分散などで、 複数の接続を使用するときとか、複数のインスタンスが出来る。 http://medaka.5ch.io/test/read.cgi/php/1172205352/426
427: nobodyさん [sage] 2008/02/15(金) 07:09:54 ID:??? PHPでもメンバポインタとかつかえれば インスタンスに縛られない柔軟なOOPができるのにな http://medaka.5ch.io/test/read.cgi/php/1172205352/427
428: nobodyさん [sage] 2008/02/15(金) 17:51:58 ID:??? 少しだけど、クラス分割のコツが掲載されてたのではっておきます。 VBプログラマ向けの情報だと、OOPの考え方の情報が結構ありそうです。 業務Webアプリの作り方の基礎(前編) 業務アプリ開発で失敗しないコツ http://www.atmarkit.co.jp/fdotnet/vblab/bizappbasic01/bizappbasic01_01.html > 1つの機能(=たとえWebアプリで複数のページにまたがっていたとしても一連の作業を > 完了させるまでの一連の操作)に対して、1つのビジネス・ロジック層のクラスを > 作ってみることをお勧めする。 > 一般的な業務アプリでは、クラスを細かくしすぎてしまうとどこで何を行っているのかが > 分かりづらくなり、結果的にメンテナンスしづらいアプリになることがある。 (パフォーマンスを考慮し、) > 可能な限りクラスのインスタンス化が必要ない静的メソッド(Sharedプロシージャ)で > 作成したステートレスな設計にすることをお勧めする。 http://medaka.5ch.io/test/read.cgi/php/1172205352/428
429: nobodyさん [sage] 2008/02/15(金) 20:19:56 ID:??? たまに昔のサイト触ったりすると非OOPなんてもうやってらんねーと思う DRYになってないから直すの大変 http://medaka.5ch.io/test/read.cgi/php/1172205352/429
430: nobodyさん [sage] 2008/02/15(金) 22:23:07 ID:??? OOPってのは設計的な考え方ってのが含まれるんだけど、 そういう考え方は別として、単にコーディング技法として便利だよ。 http://medaka.5ch.io/test/read.cgi/php/1172205352/430
431: nobodyさん [sage] 2008/02/15(金) 22:36:39 ID:??? >>272 プリミティブだけど実装してみました・・ もはやQuickFormとSmartyがないと動きませんが・・ ttp://briefcase.yahoo.co.jp/bc/oopfw http://medaka.5ch.io/test/read.cgi/php/1172205352/431
432: に ◆lKs5QMUHoA [sage] 2008/02/15(金) 23:49:43 ID:??? 風邪をひいてしまい、最近頭が回らないです。レスも遅れてしまってます。。。 >>392 確かにそうですね。継承をして作ったクラスはすべてPostgreSQLに依存してしまいます ので、is-a関係が正しいですね。 >>407 接続に関して抽象的にクラスを定義するところは勉強になりました。 私はまだまだ継承を使いこなせてないですね。 >>410 > 接続オブジェクト(CDB_PostgreSQL)はCSearch_Personalクラス外部から与える。 この発想は思いつきませんでした。 確かに言われてみるとそうです。CSearch_Personalを一切修正しないで済むようになります。 http://medaka.5ch.io/test/read.cgi/php/1172205352/432
433: に ◆lKs5QMUHoA [sage] 2008/02/15(金) 23:50:26 ID:??? >>431 サンプルありがとうございます。 あとでソースを読んでみます。 http://medaka.5ch.io/test/read.cgi/php/1172205352/433
434: 383 [sage] 2008/02/16(土) 00:15:26 ID:??? 質問しておきながら、反応かなり遅れてしまってごめんなさい。 具体的なコードやアドバイスを提示してくださった方々、ありがとう。 ちょっとまだ、自分には敷居が高くて色々大変そうですが、 考えるよりも産むが易し、と言うので、手を動かして色々試行錯誤してみます。 ありがとうございました。 http://medaka.5ch.io/test/read.cgi/php/1172205352/434
435: nobodyさん [sage] 2008/02/16(土) 11:47:29 ID:??? フレームワークの利点などの検証の参考となるかと思ったので書いておきます。 ASP.NETでは、「検証コントロール」というのが便利そうだ。 「プログラムを作成するたびにこういうのをいちいち書いたりしなくていい」という 部分の利便性は良く分かる。 ASP.NETで学ぶVisual Studio .NETの魅力 第2回 Visual Studio.NETでプログラム・レス開発を学ぶ(前編) http://www.atmarkit.co.jp/fdotnet/aspandvs/aspandvs02/aspandvs02_04.html だが、こういうのは逆にそのフレームワークに縛られてしまうのが欠点だな。 準備されてるコントロールを自分の意図するようにやりたいが、その方法が誰も分からない もしくは、出来ない場合は、それで終わりみたいな。 話はずれるが、Accessで開発してる時、各種コントロールやウィザードの組み合わせでは 対応出来ないと感じたのを思い出した。ウィザードが準備する通りの物が目的ならば良いのだが、 それにちょっと変更を加えたい場合はどうしたらよいのかという感じ。各種プロパティーの 値を変更してみても変な方向に変わっていくだけ。 自分の意図するようにカスタマイズしたい場合は、非連結のテキストボックスを貼り付けて VBAで制御するスタイルでやってたな。 http://medaka.5ch.io/test/read.cgi/php/1172205352/435
436: nobodyさん [sage] 2008/02/16(土) 12:59:37 ID:??? Accessではグリッドが無いけれど、サブフォームで代用する方法はある。 しかし、そのカスタマイズ度は低い。(確か、クリックしたセルの場所を 取るとか、一つのセルだけ色を変更するとかがかなり苦手だったような。) サブフォームで代用できない場合は、フォーム上にグリッドを貼り付けるような モジュールは無いので、DBへのアクセス手段が手軽なものを捨ててでも VBで0から作り直すのが一般的な選択方法となる。 Webアプリのフレームワークでもこのような状況になる事ってあるのかなぁ? http://medaka.5ch.io/test/read.cgi/php/1172205352/436
437: 383 [sage] 2008/02/16(土) 17:18:06 ID:??? PDOを継承する形でこんなクラスにしてみました。 突っ込みどころ満載だと思うんだけど、とりあえず、このコーディング方法はやめておいたほうがいい、 っていうところを教えていただけると嬉しいです。 class DBConnect(){ // メンバ変数にDB接続情報を記述 function __construct(){} // PDOをインスタンス化 function getConnID(){} // PDOオブジェクト格納変数を返す } class TableCtrl extends PDO{} //PDOを継承、汎用関数を定義してもOK. class CtrlA extends TableCtrl{ // テーブルAを操作する protected $ConnID; function __construct($ConnID){} //PDOオブジェクト格納変数を渡す } http://medaka.5ch.io/test/read.cgi/php/1172205352/437
438: 438 [sage] 2008/02/16(土) 17:21:28 ID:??? スクリプト先頭で、DBConnectをnewして、PDO格納オブジェクトを受け取ってから、 それを引数にCtrlAをnewする感じ……。 一応動きはするけど……全然ダメだな……。 http://medaka.5ch.io/test/read.cgi/php/1172205352/438
439: nobodyさん [sage] 2008/02/16(土) 17:46:45 ID:??? >>438 なんでもいいけど、既存のフレームワークがどうなっているか見てみろ。 見たら自分で作るきなくなるけどなw http://medaka.5ch.io/test/read.cgi/php/1172205352/439
440: 438 [sage] 2008/02/17(日) 16:53:21 ID:??? >>439 返信ありがとう。 まったくわかってないみたいなので、クラスの設計方法から学び直します。 実際の処理をする具象クラスを作って、また別に、それを統括するクラスを作っていく。 複数のクラスを設定によって使い分けしなきゃいけない場合は、抽象クラスなりインターフェイスなりを継承(後者の場合は実装)させて、 メソッド名を統一させた上で、ポリモーフィズム――クラスによって同名メソッドの振る舞いを変えさせるって解釈でいいよね?――で実現させる。 基本こんな感じかな? プリペアドステートメントに惹かれて、PDOを継承する形で作って見たんだけど、 DB接続関連の場合、接続IDを返してくるmysql_connect(); なんかのほうが、使いやすい気がする。 フレームワーク自作なんて、自分にとってはとんでもない話しですよ……。 http://medaka.5ch.io/test/read.cgi/php/1172205352/440
441: nobodyさん [sage] 2008/02/17(日) 19:14:54 ID:??? お前の下らない御託はいいから見ろっつの http://medaka.5ch.io/test/read.cgi/php/1172205352/441
442: nobodyさん [sage] 2008/02/17(日) 20:01:12 ID:??? >>441 ごめん、無視してたわけじゃないんだ。 とりあえず、軽い「ちいたん」とやらを見てきます。 スレ汚し、ごめんなさい。自重します。 http://medaka.5ch.io/test/read.cgi/php/1172205352/442
443: nobodyさん [sage] 2008/02/17(日) 20:03:55 ID:??? なぜちいたんを選ぶか・・・ http://medaka.5ch.io/test/read.cgi/php/1172205352/443
444: nobodyさん [sage] 2008/02/17(日) 20:08:23 ID:??? ( ゚д゚)ポカーン http://medaka.5ch.io/test/read.cgi/php/1172205352/444
445: nobodyさん [sage] 2008/02/17(日) 20:22:12 ID:??? 救いようが無いな。 http://medaka.5ch.io/test/read.cgi/php/1172205352/445
446: nobodyさん [sage] 2008/02/17(日) 21:40:51 ID:??? スレのレベルを下げちゃってごめんなさい……。 軽い「ちいたん」が入門にはちょうどいいかな、と思っての選択です。 いきなり、CakePHPなど大きいのを見ても、余計に混乱しそうだったので。 スレのレベルを余計に下げるだけなのでROMします。 度重なるスレ汚し、失礼しました。 http://medaka.5ch.io/test/read.cgi/php/1172205352/446
447: 1 ◆SWtzLesEmM [age] 2008/02/17(日) 23:11:41 ID:??? >>324 >>335 掲示板スクリプトの改善、どうもありがとうございます。(*^^*)v ↓動作サンプルを設置しました。 http://ssurl.net/n777 http://ssurl.net/ioah http://medaka.5ch.io/test/read.cgi/php/1172205352/447
448: nobodyさん [age] 2008/02/22(金) 09:37:11 ID:??? フレームワークをみてみろとアドバイスをしてくださってる方は、 もう少し具体的なアドバイスを出して欲しい。 具体的に、どんなフレームワークの構造を見て、どんなことを 学んだのかなどをあわせて出してくれたら、勉強もしやすいと 思うのですが。 http://medaka.5ch.io/test/read.cgi/php/1172205352/448
449: nobodyさん [sage] 2008/02/22(金) 09:52:27 ID:??? お前は人に逐一指示されないと何にもできないんだな http://medaka.5ch.io/test/read.cgi/php/1172205352/449
450: nobodyさん [sage] 2008/02/22(金) 09:59:49 ID:??? フレームワークはどこに行けば手に入りますか? http://medaka.5ch.io/test/read.cgi/php/1172205352/450
451: nobodyさん [sage] 2008/02/22(金) 11:02:18 ID:??? >>449 漠然としすぎていて良く分からないのである程度は具体例が 欲しいという意味なのですが。 >>450 こちらへどうぞ 【PHP】フレームワークについて語るスレ10【総合】 http://pc11.2ch.net/test/read.cgi/php/1202521438/l50 http://medaka.5ch.io/test/read.cgi/php/1172205352/451
452: nobodyさん [sage] 2008/02/22(金) 11:21:05 ID:??? >>451 そのくらい自分で探せよという意味なのですが http://medaka.5ch.io/test/read.cgi/php/1172205352/452
453: nobodyさん [sage] 2008/02/22(金) 11:36:33 ID:??? >>451 自分でDBの抽象化を考えてみて、クラスの定義だけでも書いてみろ。 その後にZFのZend_DBを見て、自分のとどう違うか、なぜそうなっているのかを考えろ。 それから、偉そうな態度で教えてもらおうと思うな。 http://medaka.5ch.io/test/read.cgi/php/1172205352/453
454: nobodyさん [sage] 2008/02/22(金) 11:50:38 ID:??? 別に偉そうじゃないだろ。 むしろお前のほうが偉そうだ。 何被害妄想してるんだw http://medaka.5ch.io/test/read.cgi/php/1172205352/454
455: nobodyさん [sage] 2008/02/22(金) 12:50:26 ID:??? 本気でOOP勉強したい人はまずPHP止めないと・・ PHPの世界にOOPの参考になるものがどれほどある? javaやらずOOP出来ましたってありえないでしょ。 http://medaka.5ch.io/test/read.cgi/php/1172205352/455
456: nobodyさん [sage] 2008/02/22(金) 12:58:24 ID:??? >>455 OOP勉強するなら、SmallTalkだな。 Javaとかアフォ?w http://medaka.5ch.io/test/read.cgi/php/1172205352/456
457: nobodyさん [sage] 2008/02/22(金) 13:04:24 ID:??? 本気でOOP勉強する為にPHPをやめる必要は無い。 PHP使いながら、OOP勉強すればいいだけ。 本気でOOP勉強をするなら、非実用的な言語も含めていろいろな 言語を使うことになる。そしてそれらが実用的かというと別の問題。 いくらsmalltalkでOOPをマスターしました!とかいっても それでウェブサービスを作ることはまずありえないんだから 手段と目的を逆にしないようにね。 http://medaka.5ch.io/test/read.cgi/php/1172205352/457
458: nobodyさん [age] 2008/02/22(金) 13:04:45 ID:??? その論争は、きりが無いから、マ板とかのOOPのスレでやって欲しい。 「スクリプトの世界ならRubyだろ。」とか、結論が見えてこないし、 このスレの趣旨とは違うと思う。 http://medaka.5ch.io/test/read.cgi/php/1172205352/458
459: nobodyさん [age] 2008/02/22(金) 13:06:38 ID:??? >>457は非常にすばらしいことを言ったと思う。 http://medaka.5ch.io/test/read.cgi/php/1172205352/459
460: nobodyさん [sage] 2008/02/22(金) 13:13:27 ID:??? 確かにPHPでOOPの解説をしている情報は非常に少ないので、 勉強の際はjavaやC#などの情報を読みながらやることになると思う。 しかし、PHPを辞めるまでする必要性は無いと思う。 言いたいのは「OOPの勉強するのなら、PHPに限定してはいけないよ。」 じゃないの? http://medaka.5ch.io/test/read.cgi/php/1172205352/460
461: nobodyさん [sage] 2008/02/22(金) 13:16:21 ID:??? 本気で勉強する為にPHPをやめた。 そしてOOPをマスターした。 しかし、Javaでは共有サーバーで動くソフトを作れなかった。 多くのオープンソースアプリはPHP製だった。 OOPをマスターしたが、何も出来なくなった。 完。 http://medaka.5ch.io/test/read.cgi/php/1172205352/461
462: nobodyさん [sage] 2008/02/22(金) 13:27:17 ID:??? 前から思ってたんだが、頭の悪い人間が粘着してるな。 自分がどんな風に思われてるかも分かってないんだろうなw http://medaka.5ch.io/test/read.cgi/php/1172205352/462
463: nobodyさん [sage] 2008/02/22(金) 13:58:48 ID:??? >>457 > いくらsmalltalkでOOPをマスターしました!とかいっても > それでウェブサービスを作ることはまずありえないんだから 今やウエブサービスに欠かせないMVCはそもそもsmalltalkのOOP由来なんだが…。 継続ベースだって覚えておいて損はない。 http://www.ibm.com/developerworks/opensource/library/os-lightweight8/ http://www.ibm.com/developerworks/jp/java/library/j-cb07056/index.html http://medaka.5ch.io/test/read.cgi/php/1172205352/463
464: nobodyさん [sage] 2008/02/22(金) 14:19:47 ID:??? PHPでOOPする為に別の言語でOOPの勉強をする。 自分の為に必要だからやるだけ。 http://medaka.5ch.io/test/read.cgi/php/1172205352/464
465: nobodyさん [sage] 2008/02/22(金) 14:42:14 ID:??? >>463 うん。だからさ勉強・研究の為の言語と 実用・開発の為の言語は別なの。 http://medaka.5ch.io/test/read.cgi/php/1172205352/465
466: nobodyさん [sage] 2008/02/22(金) 17:56:13 ID:??? このソースの解析をがんばればいろいろ見えてくるだろうけど、 一人じゃ到底無理だろうな。別スレでも立てて、解析して ドキュメント作ろう!見たいなことやってみる? Visual Studio 2008で見る.NET Frameworkのソースコード http://www.atmarkit.co.jp/fdotnet/insiderseye/20080222sourcecode/sourcecode.html > 公開されたソースコードには(もちろん英語だが)多くのコメントが入っており、 > ローカル変数名も元のままの“生”のソースコードである。 > そしてそれがVisual Studio 2008でシームレスにトレースできるようになる http://medaka.5ch.io/test/read.cgi/php/1172205352/466
467: nobodyさん [sage] 2008/02/23(土) 08:39:50 ID:??? >>447 サンプル見たけど Viewで変数が入らないとこで”を使ってる意味がわからない ”と’の使い方間違ってると思う 面倒な使いわけするならsprintfという手もある パラメータ変数が渡ってくる switch文のcaseに頭文字を大文字にしてる意味がわからない http://medaka.5ch.io/test/read.cgi/php/1172205352/467
468: nobodyさん [sage] 2008/02/23(土) 08:44:08 ID:??? function html_head(){ echo "<html>"; echo "<head><title>BBS</title></head>"; echo "<body>"; } 上は、こうでいいやん! function html_head(){ echo '<html>'; echo '<head><title>BBS</title></head>'; echo '<body>'; } なんでダブルクォートやねん http://medaka.5ch.io/test/read.cgi/php/1172205352/468
469: nobodyさん [sage] 2008/02/23(土) 09:12:10 ID:??? >>447 class View_Baseは helper的な役割だからいいとしても View_List View_WriteFinish コントローラで判断させるべき機能が Viewで書かれてるし テンプレート化されてないのもあって ぐちゃぐちゃですね。 ここがOOP構造を理解しにくい作りになってる コントローラは面倒でもOOP理解するには必要だ 理解しやすくするためにテンプレート化も必要 http://medaka.5ch.io/test/read.cgi/php/1172205352/469
470: nobodyさん [sage] 2008/02/23(土) 09:19:29 ID:??? >>447 本来コントローラとModelがやりとりする部分が コントローラが無いために Viewで処理されてる MVモデルですね! OOP構造化理解のためには 面倒でもMVCモデルじゃないと 初心者を間違った方向に導きますよ!! http://medaka.5ch.io/test/read.cgi/php/1172205352/470
471: nobodyさん [sage] 2008/02/23(土) 12:22:21 ID:??? >>469 具体的にどうすればいいの? 条件分岐してないから切り分けは良さげに見えたんだが。 viewは機能ごとの静的HTML吐くのとは違うの? http://medaka.5ch.io/test/read.cgi/php/1172205352/471
472: nobodyさん [] 2008/02/23(土) 13:43:29 ID:i4AYcehM http://www.microsoft.com/japan/msdn/practices/type/Patterns/enterprise/DesMVC.aspx これの アクティブモデルは、コントローラとは関係なくモデルで状態が変更される場合に使用されます。 これは別のソースでデータが変更され、この変更をビューに反映する必要がある場合に起こります。 株価相場表示を例に考えてみます。株価データが変更された場合、外部ソースからデータを受け取り、チッカーバンドや警告ウィンドウなどのビューを更新する必要があります。 モデルの内部状態の変更が検知できるのはモデルだけなので、モデルからビューに表示を更新するよう通知する必要があります。 って、hoge.php?param1=aaa¶m2=iiiみたいなリクエストを解析してコントローラがそれに応じたビューを選択して云々 ではなくて、例えばブログだったら記事テーブルにまだ一つもデータが無いときは「まだ記事が登録されていません」のビューをモデルが選ぶ、ってことかい? だとしたらどうやって実装したらいいんだろ・・・ そのモデルを使用するビューをモデルに登録しておいて、モデルのデータによって分岐させて使うビューを選択。そのときにビューは出力に必要なデータをモデルからひっぱりだす MSDNは書き方がやたらめんどいぜ http://medaka.5ch.io/test/read.cgi/php/1172205352/472
473: nobodyさん [] 2008/02/23(土) 13:56:50 ID:i4AYcehM コントローラがリクエスト解析 ↓ そのリクエストにおいて必要なモデルのインスタンス生成 ↓ モデルのメソッド呼び出す ↓ 選択したビューのupdate呼びだして出力に必要な変数定義 ↓ モデルがビューの出力するメソッドを呼ぶ ビューはモデルからの変更を受け付けるupdateメソッドと出力するためのputHtmlメソッド持つインターフェイスを実装する なんか間違ってますか>< 教えてください!>< http://medaka.5ch.io/test/read.cgi/php/1172205352/473
474: nobodyさん [sage] 2008/02/23(土) 14:42:12 ID:??? なんですでにあるフレームワークを参考にしない? http://medaka.5ch.io/test/read.cgi/php/1172205352/474
475: 474 [sage] 2008/02/23(土) 14:43:18 ID:??? 474は無視してくれ http://medaka.5ch.io/test/read.cgi/php/1172205352/475
476: 474 [sage] 2008/02/23(土) 15:11:03 ID:??? >>472 それはようするに、株価データのようにユーザーが ページを更新しなくてもデータが更新されるときの話。 コントローラがモデルからデータ引っ張ってきて そのデータをビューに渡して表示という処理は変わらない。 ↑この処理を、普通は「URLを開いた」というタイミングで行っているわけ。 しかし、そのタイミングだと株価データ表示のようなリアルタイムでの表示は難しい 人間がF5を押す必要がある。この場合も更新されているとは限らず無駄に負荷が高くなる。 それを(ウェブアプリ以外では)モデルからデータが変更されたよーと コントローラ・ビューに通知し、その通知が来たタイミングでコントローラ・ビューが モデルからデータを引っ張ってきて(ry)という設計方法がある。 それが>>472で言っていること。 モデルに対して、コントローラやビューを「変更あったら俺に通知してくれ」 登録することでそれを実現する。 (データに変更があったらコントローラ・ビューのこの関数を呼び出してくれとモデルに登録する) でも、この設計。モデル(つまりサーバー)から変更の通知をすることになるので ウェブアプリでは一工夫必要になる。結局は、JavaScriptを使って 一定ごとに変更チェックをすることになるわけだが、まあそれをAjaxとかの技術で 非同期的にバックグラウンドで行うことにより、見た目上はサーバーから 変更通知がくるような感じに出来るんでしょ?やったこと無いけど。 その通知を元に、画面の一部、もしくはすべてを再描画する。 あとは詳しい人に任せた。 http://medaka.5ch.io/test/read.cgi/php/1172205352/476
477: nobodyさん [] 2008/02/23(土) 17:10:06 ID:i4AYcehM >>476 レス? オブザーバパターンはWebアプリに不向きなのかー。 じゃあ、 //コントローラの実行メソッド public function doExecute(){ if($this->model->getArticleNum() === 0){ $message = '記事がまだ一つもありません'; require_once('./template/Error.php'); }else{ $this->view->putHtml(); } } こういう、コントローラがモデルからデータ引っ張ってきて分岐して、ビューを選択する、ってのはアリなのかな? ちょっとCakePHPとかの資料ググってくるは http://medaka.5ch.io/test/read.cgi/php/1172205352/477
478: nobodyさん [sage] 2008/02/23(土) 17:50:55 ID:??? そういう場合Comet使うんじゃね? Cometすげえ!って大騒ぎになってたころ資料見ても俺には何がなんだか理解できなかったけど http://medaka.5ch.io/test/read.cgi/php/1172205352/478
479: nobodyさん [sage] 2008/02/23(土) 20:15:50 ID:??? 1を含めてコントローラの役割が全然わかってないんだよ! MVモデルになってるんだよ! CakePHP、symfonyのソースをよく解読してみろよ! 1のサンプルにはVIEWにコントローラで処理するコードかいてあるんだぜ! http://medaka.5ch.io/test/read.cgi/php/1172205352/479
480: nobodyさん [sage] 2008/02/23(土) 20:21:31 ID:??? PHPでOOPを追求すると 結局はMVCモデルのフレームワークにテーマが行き着くんだよね だったらPHPフレームワークのスレと同じじゃんて感じで ここでOOPを議論するときは MVCモデル以外を議論の対象にしたいよ http://medaka.5ch.io/test/read.cgi/php/1172205352/480
481: nobodyさん [sage] 2008/02/23(土) 20:27:22 ID:??? >>478 ワロタ。目からうろこw httpってのはクライアント(ブラウザ側)から聞くことしかできないんだ。 どうやってもサーバーから話しかけることはできない。 だから、たとえば一分おきに、 「データ変わったかい?」「変わってねーよ」 「データ変わったかい?」「変わってねーよ」 「データ変わったかい?」「変わってねーよ」 「データ変わったかい?」「変わってねーよ」 「データ変わったかい?」「変わったよ!」 って聞かないといけない。たとえ4分半の時点でデータが変わっていても 5分後に聞くまでわからない。Cometというのは、 「データ変わったかい?」・・・・・・・・・・・(4分30秒後)「変わったよ!」・・・(数分後)「また変わったよ!」 とこうなる。 本質的にはクライアントから聞いているわけだが、変更があるまで みのもんたみたいにずっと溜めてから返答するため、 負荷の軽減とリアルタイムな通知が実現できるというわけ。 しかし、いまさらだけどhttpで無茶やりすぎだw http://medaka.5ch.io/test/read.cgi/php/1172205352/481
482: nobodyさん [sage] 2008/02/23(土) 20:30:12 ID:??? 例え巧すぎワロタ http://medaka.5ch.io/test/read.cgi/php/1172205352/482
483: nobodyさん [sage] 2008/02/23(土) 20:32:35 ID:??? >>479 だから具体的にどこがだよ? http://medaka.5ch.io/test/read.cgi/php/1172205352/483
484: nobodyさん [sage] 2008/02/23(土) 20:35:35 ID:??? >>480 > PHPでOOPを追求すると > 結局はMVCモデルのフレームワークにテーマが行き着くんだよね それはPHPに限らず。 そもそもOOPが一番よく使われるのは、フレームワーク部分なんだよ。 OOPはフレームワークを作るときに使うものといっても過言じゃない。 通常のビジネスロジック部分は基本的に単純な命令の集まりになるので OOPを使っているという感じは無くなる。 http://medaka.5ch.io/test/read.cgi/php/1172205352/484
485: nobodyさん [sage] 2008/02/23(土) 20:43:56 ID:??? >>484 だから結局フレームワークの議論になるんなら このスレの意味が無いんだよ http://medaka.5ch.io/test/read.cgi/php/1172205352/485
486: nobodyさん [sage] 2008/02/23(土) 20:45:46 ID:??? >>483 >>469 http://medaka.5ch.io/test/read.cgi/php/1172205352/486
487: nobodyさん [sage] 2008/02/23(土) 20:49:01 ID:??? >>485 フレームワークスレは、フレームワークの比較などを話すスレ OOPはフレームワークを題材に、OOPの話をするスレ おk? http://medaka.5ch.io/test/read.cgi/php/1172205352/487
488: nobodyさん [sage] 2008/02/23(土) 20:53:31 ID:??? >>486 class View_List extends View_Base{ // function Write_HTML_head(){ $this->html_head(); $this->html_title("--- PHP で OOP の BBS ---"); echo "<hr>"; } // 書き込みフォームを表示させる。 function Write_HTML_form(){ $this->html_form_start("index.php"); echo "<b>[メッセージを投稿する]</b><br>"; $this->html_input_hidden("PAGE", "Write"); echo "タイトル:<br>"; $this->html_input_text("title"); echo "<br>"; echo "メッセージ:<br>"; $this->html_textarea("msg"); echo "<br>"; $this->html_submit(" 書き込む "); $this->html_form_end(); } http://medaka.5ch.io/test/read.cgi/php/1172205352/488
489: nobodyさん [sage] 2008/02/23(土) 20:54:28 ID:??? // function Write_HTML_foot(){ $this->html_foot(); } // function Write_HTML_data($line){ echo "<b>タイトル:</b>"; echo $line->GetName(); echo "<br>"; echo "<b>メッセージ:</b>"; echo $line->GetMsg(); echo "<hr>"; } } この中のどこがコントローラで判断させるべき処理なんだ? http://medaka.5ch.io/test/read.cgi/php/1172205352/489
490: nobodyさん [sage] 2008/02/23(土) 20:57:01 ID:??? >>487 OOPはフレームワークを題材に、OOPの話をするスレならプログラム板だろ? 初心者だらけの、ここよりも良レスが来ると思うんだが PHPにこだわる理由がわからない WEBでのフレームワークならどれも仕組みは同じだろうに じゃあperlでOOP、rubyでOOPていうスレが無いのは何でなんだ? http://medaka.5ch.io/test/read.cgi/php/1172205352/490
491: nobodyさん [sage] 2008/02/23(土) 21:21:33 ID:??? function GetNextData(){ if( $line = fgets($this->m_file_hd, 1024) ){ $line2 = split($this->m_pause_chr, $line); $ans = new Line(); $ans->SetData($line2[0], $line2[1]); }else{ $ans = ""; } return $ans; } これは下記がいいだろ? function GetNextData(){ $ans = ""; if( $line = fgets($this->m_file_hd, 1024) ){ $line2 = split($this->m_pause_chr, $line); $ans = new Line(); $ans->SetData($line2[0], $line2[1]); } return $ans; } http://medaka.5ch.io/test/read.cgi/php/1172205352/491
492: nobodyさん [sage] 2008/02/23(土) 21:36:01 ID:??? // データを1行読み出す。 function GetNextData(){ if( $line = fgets($this->m_file_hd, 1024) ){ $line2 = split($this->m_pause_chr, $line); $ans = new Line(); $ans->SetData($line2[0], $line2[1]); }else{ $ans = ""; } return $ans; } 変数名の最後に数字使うのは初心者だろ? もしコード拡張で数値計算が入ったら紛らわしい http://medaka.5ch.io/test/read.cgi/php/1172205352/492
493: nobodyさん [sage] 2008/02/23(土) 21:39:32 ID:??? // データを最後に追記する。 function AddLast($title, $msg){ // ファイルを開く $hd = fopen($this->m_file_name , "a"); // データを書き込む $line = $title . $this->m_pause_chr . $msg . "\n"; fwrite($hd, $line); // ファイルを閉じる fclose($hd); } なんでflock入れないの? http://medaka.5ch.io/test/read.cgi/php/1172205352/493
494: nobodyさん [sage] 2008/02/23(土) 21:47:30 ID:??? $line2 = split($this->m_pause_chr, $line); はこれの方がわかりやすいだろ? list($name,$msg) = split($this->m_pause_chr, $line); http://medaka.5ch.io/test/read.cgi/php/1172205352/494
495: nobodyさん [sage] 2008/02/23(土) 21:52:46 ID:??? function GetNextData(){ if( $line = fgets($this->m_file_hd, 1024) ){ $line2 = split($this->m_pause_chr, $line); $ans = new Line(); $ans->SetData($line2[0], $line2[1]); }else{ $ans = ""; } return $ans; } これは下記に修正した方がわかりやすいよ function GetNextData(){ $ans = ""; if( $line = fgets($this->m_file_hd, 1024) ){ list($name,$msg) = split($this->m_pause_chr, $line); $ans = new Line(); $ans->SetData($name, $msg); } return $ans; } http://medaka.5ch.io/test/read.cgi/php/1172205352/495
496: nobodyさん [sage] 2008/02/23(土) 21:55:49 ID:??? 変数にオブジェクトが入ってくるなら 初期化はこうだった function GetNextData(){ $ans = null; if( $line = fgets($this->m_file_hd, 1024) ){ list($name,$msg) = split($this->m_pause_chr, $line); $ans = new Line(); $ans->SetData($name, $msg); } return $ans; } http://medaka.5ch.io/test/read.cgi/php/1172205352/496
497: nobodyさん [sage] 2008/02/23(土) 22:04:10 ID:??? else{ $ans = ""; } これ全部 $ans = null; に初期化に変えて elseとっぱらった方がいいよ 返り値はオブジェクトが入ってるか入ってないかという処理なのに 空文字を返すのよくないよ! http://medaka.5ch.io/test/read.cgi/php/1172205352/497
498: nobodyさん [sage] 2008/02/23(土) 22:44:30 ID:??? まぁ空文字もnullも演算子によっては同様にfalse扱いできるという点がPHPの特徴なわけで http://medaka.5ch.io/test/read.cgi/php/1172205352/498
499: nobodyさん [sage] 2008/02/24(日) 05:50:47 ID:??? >>490 > じゃあperlでOOP、rubyでOOPていうスレが無いのは何でなんだ? 人気が無い言語だからw http://medaka.5ch.io/test/read.cgi/php/1172205352/499
500: nobodyさん [sage] 2008/02/24(日) 11:09:06 ID:??? プログラム初心者がPHPだけでOOPを習得するのはほぼ不可能に近いと思う。 OOP習得が目的ならあまりにも無謀だし、全くもって得策ではない。 フレームワークとか利用しても、ユーザが$_POSTとか直接呼べちゃうと 結局OOPの意味が無いんではないだろうか?むしろそれが出来てしまうPHPは OOP理解には全く向いていない言語だとも思うのだ。 でも不完全ながら、PHPでOOPっぽくコーディングすること自体は楽しいと思う。 http://medaka.5ch.io/test/read.cgi/php/1172205352/500
501: nobodyさん [sage] 2008/02/24(日) 11:31:24 ID:??? >>500 > プログラム初心者がPHPだけでOOPを習得するのはほぼ不可能に近いと思う。 どんな言語でも当たり前。 > フレームワークとか利用しても、ユーザが$_POSTとか直接呼べちゃうと > 結局OOPの意味が無いんではないだろうか? まったく関係ない。 http://medaka.5ch.io/test/read.cgi/php/1172205352/501
502: nobodyさん [sage] 2008/02/24(日) 14:04:04 ID:??? PHPでOOPするには 初心者じゃ無理だよ オブジェクトの設計は上手に出来ても コーディングレベルで初心者ならではのミスが目立つ http://medaka.5ch.io/test/read.cgi/php/1172205352/502
503: nobodyさん [sage] 2008/02/24(日) 14:08:38 ID:??? PHPでOOP勉強は適してないよ JAVA,C#,rubyみたいに OOPを前提として作られた言語じゃないからね http://medaka.5ch.io/test/read.cgi/php/1172205352/503
504: nobodyさん [sage] 2008/02/24(日) 15:14:16 ID:??? 「PHPでOOPは」みたいな話は何度も出てるのに、いつも具体的な話にならないのは何で? http://medaka.5ch.io/test/read.cgi/php/1172205352/504
505: nobodyさん [sage] 2008/02/24(日) 15:31:22 ID:??? お前に知識がないから http://medaka.5ch.io/test/read.cgi/php/1172205352/505
506: nobodyさん [sage] 2008/02/24(日) 15:37:16 ID:??? ( ´・∀・`)へー http://medaka.5ch.io/test/read.cgi/php/1172205352/506
507: nobodyさん [sage] 2008/02/24(日) 15:38:42 ID:??? 関係なくはないよ。グローバル変数として、どこからでも呼べちゃうんだから、カプセル化できてないってことになる。 だいたい$_REQUESTや$_SESSIONがオブジェクトじゃなくって、変数な時点で、PHPのウェブアプリでオブジェクトなんて使うなっていう、PHP開発者からのメッセージと理解すべき。 http://medaka.5ch.io/test/read.cgi/php/1172205352/507
508: nobodyさん [sage] 2008/02/24(日) 15:44:11 ID:??? グローバル変数が使えたら、カプセル化できない言語ってことになるのか。 そりゃすごい。 http://medaka.5ch.io/test/read.cgi/php/1172205352/508
509: nobodyさん [sage] 2008/02/24(日) 16:03:09 ID:??? 俺も、>>469に書いてる、コントローラで判断させるべき処理の具体的な コードを教えて欲しい。 このコードの話が質問されても出ていないのはなぜ?フレームワークを 使わないと、理論を完全に実現できないとかそういう話だから? http://medaka.5ch.io/test/read.cgi/php/1172205352/509
510: nobodyさん [sage] 2008/02/24(日) 16:19:48 ID:??? >>479=486も結局答えられてないしな。 だめだだめだと言うものの、何故だめなのか、どう書けばいいのかということには答えられない低レベル批判厨なのさ http://medaka.5ch.io/test/read.cgi/php/1172205352/510
511: nobodyさん [sage] 2008/02/24(日) 19:08:42 ID:??? また見えなくすることをカプセル化と勘違いしてる高レベルプログラマさんのお出ましだ http://medaka.5ch.io/test/read.cgi/php/1172205352/511
512: 1 ◆SWtzLesEmM [age] 2008/02/24(日) 19:49:37 ID:??? >>1 ◆SWtzLesEmM :2007/02/23(金) 13:35:52 このスレも1周年を迎えてましたね! …時間が経つのは早いなー。>< 1年前からあまり進歩してないのは気のせい?(・∀・) http://medaka.5ch.io/test/read.cgi/php/1172205352/512
513: 1 ◆SWtzLesEmM [age] 2008/02/24(日) 19:50:55 ID:??? >>487 PHPでOOPを勉強するとき、フレームワークは良い見本になりますね! >>490 >PHPにこだわる理由がわからない ホームページ作成でPHPの勉強を始めました。 プログラミングの勉強をしていたら、手続き型以外にOOPという方法があることを知り、使えるようになりたいと思いました。 >>502 Zendが積極的に音頭を取って、初心者向けの情報提供をやってくれたらいいですね。>< http://www.zend.co.jp/tech/ Zendの代わりに、PHPプロというサイトがPHP初心者のニーズをカバーしてくれているでしょうか?(・∀・) http://www.phppro.jp/ >>503 Javaもちょっと勉強してみました。^^ …今使っているレンタルサーバだとJavaが動かない>< >>507 自分で作ったクラスに関しては、クラス内に変数を封じ込めておけるので、スコープ(変数が操作できる領域)をコントロールできるのではないでしょうか? PHPが最初から用意してくれているグローバル変数($_REQUES等T)のデメリットがよく分からないのですが、いつでもアクセスできるのでこれはこれで便利だと思います。 とりあえず、PHPでOOPが使えるようになりたいです。 PHP以外の言語も使ってみて、必要に応じて使い分けができるようになれればイイですね!(´∀`) http://medaka.5ch.io/test/read.cgi/php/1172205352/513
514: 1 ◆SWtzLesEmM [age] 2008/02/24(日) 20:01:23 ID:??? フレームワークに関して情報提供どうもありがとうございます。 >>479 MVモデル…(ノ∀`) アチャー 以前作った掲示板を、MVCフレームワークの形で作り直してみました。(^^)v ↓ http://ssurl.net/ryol http://medaka.5ch.io/test/read.cgi/php/1172205352/514
515: nobodyさん [sage] 2008/02/24(日) 20:34:16 ID:??? 結局1のやりたいことは アマゾンのアフィリエイトの誘導らしいwww http://medaka.5ch.io/test/read.cgi/php/1172205352/515
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 379 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.020s