PHPでOOP (894レス)
PHPでOOP http://medaka.5ch.io/test/read.cgi/php/1172205352/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
102: nobodyさん [sage] 2007/07/11(水) 14:16:38 ID:??? いやさ,まず公式マニュアルを読む癖を付けようぜ http://medaka.5ch.io/test/read.cgi/php/1172205352/102
103: nobodyさん [sage] 2007/07/11(水) 14:44:53 ID:??? MVCじゃないとOOPなんて意味ないですかr http://medaka.5ch.io/test/read.cgi/php/1172205352/103
104: nobodyさん [sage] 2007/07/11(水) 17:30:14 ID:??? ( д) ...。。 http://medaka.5ch.io/test/read.cgi/php/1172205352/104
105: nobodyさん [sage] 2007/07/12(木) 02:57:31 ID:??? MVCもデザインパターンの一種じゃなかったっけ? http://medaka.5ch.io/test/read.cgi/php/1172205352/105
106: nobodyさん [sage] 2007/07/12(木) 08:06:18 ID:??? >>100 なんかphpspotのその文はおかしいな。 エラー処理は例外を使おうがそうじゃなかろうが変わらない。 呼ばれた側はどういうエラーがあったか返す責任があるし、 呼んだ側は返ってきたエラーをチェックする責任がある。 エラーが起きた時の挙動を自分で決めれるならその場で処理すれば良いし、 そこではまだ決められないならさらに上位へreturnなりthrowすれば良い。 http://medaka.5ch.io/test/read.cgi/php/1172205352/106
107: nobodyさん [] 2007/07/14(土) 15:28:38 ID:w3CTKtks OOPってのはアプリケーションをモノに見立てて、それを構成している部品をクラスとして定義する、ってとこまではなんとなく理解した。 例外処理?なにそれうまいの? http://medaka.5ch.io/test/read.cgi/php/1172205352/107
108: nobodyさん [sage] 2007/07/14(土) 18:34:23 ID:??? ダンボールの味がするお http://medaka.5ch.io/test/read.cgi/php/1172205352/108
109: nobodyさん [sage] 2007/07/14(土) 19:32:25 ID:??? おまいらオブジェクト指向に騙されてるよ。ただのデータ型に過ぎない。 http://medaka.5ch.io/test/read.cgi/php/1172205352/109
110: nobodyさん [] 2007/07/14(土) 19:46:31 ID:w3CTKtks 今、習作としてプロフィールスクリプト(っていうのも大袈裟なぐらいショボイやつ)を書いてるんだけど、どうにも悩む。悩む。 とりあえず、 -質問と答え(Entry) --セッタ(SetQuestion,SetAnswer) --ゲッタ(GetQuestion,GetAnswer) -それらのEntryを編集したり、操作したりする(ManageEntry) --POSTされたデータにEntryの値を変更する(EditEntry) -プロフィール自体(Profiel) --質問と答えを出力(ViewProfiel) こんなクラスたちを作ったんだけどなんかおかしい気がしてならない。 とくにManageEntryのとことか。 ManageEntryでEntryオブジェクトの配列Entriesを作っといてそれをそのクラス内で操作とか?は?え? OOPムズイ、ナキタイ スレ汚しスマソ http://medaka.5ch.io/test/read.cgi/php/1172205352/110
111: nobodyさん [sage] 2007/07/14(土) 21:29:40 ID:??? どんな物を作ってるのかよく分からないけど ぱっと見で確実に言える事は、個別のクラスが多すぎ。 半分くらい継承とメソッドの追加で済みそう。 今のままだと拡張もやり難そう。 プロフィールが"profiel"なのはつっこんだ方が良いのかな。 CakeとかSynfonyみたいな、ライブラリじゃないフレームワークを 使い込んでソース読んだら、どう設計したらよいか一気に分かるよ。 http://medaka.5ch.io/test/read.cgi/php/1172205352/111
112: nobodyさん [] 2007/07/14(土) 22:22:33 ID:w3CTKtks 継承とメソッドの追加ってどうやるんですか><; 正直どうやったらいいのか全くわからん。 プロフィール?え?あ?あはあは。 http://medaka.5ch.io/test/read.cgi/php/1172205352/112
113: nobodyさん [sage] 2007/07/15(日) 00:13:47 ID:??? きめぇ http://medaka.5ch.io/test/read.cgi/php/1172205352/113
114: nobodyさん [sage] 2007/07/15(日) 00:19:07 ID:??? Synfony はつっこんだ方(ry http://medaka.5ch.io/test/read.cgi/php/1172205352/114
115: 1 ◆SWtzLesEmM [age] 2007/07/26(木) 10:21:49 ID:??? >>106 >呼ばれた側はどういうエラーがあったか返す責任があるし、 >呼んだ側は返ってきたエラーをチェックする責任がある。 なるほど〜(・∀・) 呼ぶ側と呼ばれた側のそれぞれでエラーの対処があれば、手堅いですね! 大変参考になりました。 http://medaka.5ch.io/test/read.cgi/php/1172205352/115
116: 1 ◆SWtzLesEmM [age] 2007/07/26(木) 10:29:09 ID:??? 掲示板の続きを作りました。 DBにアクセスする機能をクラスにしてみました。 http://kameleon.s241.xrea.com/dokuwiki/doku.php?id=%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%8C%87%E5%90%91%E3%81%A7%E4%BD%9C%E3%81%A3%E3%81%A6%E3%81%BF%E3%82%8B 動作サンプル http://kameleon.s241.xrea.com/oop/bbs2/index.php なんか、>>55さんのアドバイスの形になってませんが…orz とりあえず、DBアクセスをクラスの形にできたので一歩前進!!!\(^o^)/ http://medaka.5ch.io/test/read.cgi/php/1172205352/116
117: 1 ◆SWtzLesEmM [age] 2007/07/26(木) 10:50:37 ID:??? >>110 おー、ガンバレ〜〜〜☆ >>111 (1) Entryクラス 文章を「書き込む」メソッド、「読む」メソッド、「書き換える(編集)」メソッド、「削除する」メソッドが用意されている。 (2) Entryクラスを継承して、質問用のクラスを用意 =質問のデータだけを操作できる (3) Entryクラスを継承して、答え用のクラスを用意 =答えのデータだけを操作できる というかんじになるんでしょうか? どういうまとまりでクラスにすればいいのか、そこら辺がなんかよく分からないんですよねー(ノ∀`) http://medaka.5ch.io/test/read.cgi/php/1172205352/117
118: nobodyさん [sage] 2007/07/26(木) 10:57:58 ID:??? どうしてPDOをry http://medaka.5ch.io/test/read.cgi/php/1172205352/118
119: nobodyさん [sage] 2007/07/27(金) 00:44:20 ID:??? おんにゃにょこの おっぱい ぷぴにぷにだにょ〜 http://medaka.5ch.io/test/read.cgi/php/1172205352/119
120: nobodyさん [sage] 2007/07/28(土) 17:35:02 ID:??? 夏だな http://medaka.5ch.io/test/read.cgi/php/1172205352/120
121: nobodyさん [sage] 2007/07/30(月) 03:51:10 ID:??? function &foo { echo "ほげ" } こういうやつ、「リファレンスを返す」っていうんですか? これはどういう処理をしているんでしょうか? どこかで定義されているfoo()という関数に何かしているんですか? http://medaka.5ch.io/test/read.cgi/php/1172205352/121
122: nobodyさん [sage] 2007/07/31(火) 07:40:25 ID:??? 高機能な参照関数だな http://medaka.5ch.io/test/read.cgi/php/1172205352/122
123: nobodyさん [] 2007/08/01(水) 06:30:28 ID:abLVM2kM >>87 買ってしまっていたよ。Iteratorまで読んだけど、 分かったような分からないような気分。 説明が少ない&下手なのは分かった。 http://medaka.5ch.io/test/read.cgi/php/1172205352/123
124: nobodyさん [sage] 2007/08/01(水) 22:18:22 ID:??? 分からない人に分かるように書いてないという意味では同意。 書いてあることを全て理解していこうとするとこんがらがってくるしね。 まぁいい頭の体操になったけど。 あんなサンプルのためのサンプルではなく、具体的な使い方と利点が書いてあるとOOP素人にも理解しやすかったかもね。 http://medaka.5ch.io/test/read.cgi/php/1172205352/124
125: 522 [] 2007/08/26(日) 13:53:57 ID:QzPwO1Nh >>117 なんかCakePHP使ってみたんだけど質問と答えを操作するクラス作って云々みたいになって結局>>110と同じような感じになっちゃいましたとさ・・・ 「モノ」に書く機能とか読む機能持たせていーの?おしえてえろいひと>< http://medaka.5ch.io/test/read.cgi/php/1172205352/125
126: nobodyさん [sage] 2007/08/26(日) 14:28:30 ID:??? お前が「モノ」をどう捉えるか次第だよ http://medaka.5ch.io/test/read.cgi/php/1172205352/126
127: nobodyさん [sage] 2007/08/28(火) 02:25:00 ID:??? 結局どうやってデータを保持したら、人間にとって分かりやすいか、コンピュータにとってやさしいかってことだろ。 http://medaka.5ch.io/test/read.cgi/php/1172205352/127
128: nobodyさん [sage] 2007/10/03(水) 02:51:35 ID:??? オブジェクト指向は木構造を再現しようとしているだけ。 インスタンスだのオブジェクトだのは枝、茎、葉、花、果実を作るというだけ。 mainでは結果(果実)だけをとりたいから枝やら茎やらは見えなくしとけってことだろ? http://medaka.5ch.io/test/read.cgi/php/1172205352/128
129: nobodyさん [sage] 2007/10/03(水) 16:27:59 ID:??? >>128 まあそんな感じだ http://medaka.5ch.io/test/read.cgi/php/1172205352/129
130: nobodyさん [sage] 2007/10/03(水) 23:45:33 ID:??? まぁ、ファイルの管理方法も木構造だし、インターネットなんていっても網状でなく、 サーバーを経由した木構造になってることから演算機が理解しやすいデータ構造は木構造である。 こういってしまっても過言ではないと思う。 例えば、手続き型は東京の小さなバイク便が地方への配達を頼まれても東京発で請け負うみたいなもの。 それに対して、OODはヤ○ト運輸が東京で頼まれた配達を一旦、地方の配送センターに送るようなもの。 配達する対象が少なければ、バイク便に頼んだ方が早いかもしれないけど、数が多くなるとヤ○ト運輸。 http://medaka.5ch.io/test/read.cgi/php/1172205352/130
131: nobodyさん [sage] 2007/10/05(金) 01:16:19 ID:??? うん、ここ数日でオブジェクト思考勉強してて分かったこと。 ちなみに128==130==漏れです。 ・オブジェクト指向は木構造 ・目的は種の存続、繁栄 ・ここでのフローは一つずつだが、間にどれだけの枝が挟まるかは設計次第 クラス設計 種(プリプロセッサ)から芽が出る(この時点では手続き型でも、OODでもない) 根クラス…main関数、もしくはmainクラスの設計、遺伝子(設計の違いで木になるかどうかが決定) 幹クラス…根から養分を吸い上げる(大まかな工程の分類) オブジェクト生成 枝クラス…効率的に日光を取得できるよう枝を伸ばす(コンストラクタ) 葉クラス…光合成を行い、自己生産を行う(メソッド) 葉緑素クラス…目立たない頑張り屋さん(ライブラリ) 花クラス…実となるか枯れ落ちるか(オブジェクト) 実行結果 果実クラス…土に還り、新たな種となりました(プロジェクト成功) http://medaka.5ch.io/test/read.cgi/php/1172205352/131
132: nobodyさん [sage] 2007/10/05(金) 20:07:34 ID:??? なんかすぐ動いて実用的で簡単なサンプルください http://medaka.5ch.io/test/read.cgi/php/1172205352/132
133: nobodyさん [sage] 2007/10/05(金) 20:35:14 ID:??? package hoge; my $class=shift; $ENV{'TZ'} = "JST-9"; my ($sec,$min,$hour,$mday,$mon,$year) = gmtime(time + 9*60*60); my $obj={'sec'->$sec, 'min'->$min, 'hour'->$hour, 'mday'->$mday, 'mon'->$mon, 'year'->$year}; return bless $obj, $class; 1; 適当に書いてみた。あとは時間をゴニョゴニョするだけ、普通に作ったほうがメリット大きい気もするがキニシナイ!! ヨウカソマソ参上===[・∀・]ノシ http://medaka.5ch.io/test/read.cgi/php/1172205352/133
134: 131 [sage] 2007/10/05(金) 23:40:29 ID:??? 実際に設計して、作ってみるとオブジェクト指向の本質は"同じことは出来るだけ"しない。 この論理で動いてるような気がしてきた。何でもかんでもオブジェクトにするのではなく、 運搬の頻度が激しいデータ、プログラム中で何度も使用するデータをオブジェクトにする。 そんな感じで合ってるのかな?あと、変数の受け渡しは原則、参照で行うみたいな。 http://medaka.5ch.io/test/read.cgi/php/1172205352/134
135: 131 [sage] 2007/10/06(土) 13:37:33 ID:??? 何となく掴めてきた。もっかい木構造で表してみる。 根: プリプロセッサ、送信データ(実行役) 幹: main(効率よく栄養=処理を振り分ける) [クラス]・・・大規模にもなるとこれが幾重にもネストされる。 枝: コンストラクタ(葉に栄養=処理を割り振る、葉で生成された養分=オブジェクトを幹に伝える) 葉: メソッド(オブジェクト=養分を生成する) 花: オブジェクト(実行結果=果実の手前) 果実: 実行結果(主の繁栄=実行結果が真) ちなみに実行結果が偽となるのは幹から花に至るまででエラーが起こった場合。 漏れルール mainは基本的にクラスに指示を与える以外しない。 コンストラクタでオブジェクトの用意を行う。 メンバメソッドはオブジェクトの加工を行う。 コンストラクタからオブジェクトを返す。 mainは次に必要なオブジェクトを作るクラスへ処理を回す。 http://medaka.5ch.io/test/read.cgi/php/1172205352/135
136: nobodyさん [sage] 2007/10/07(日) 12:52:54 ID:??? 日曜日1GET! 始めまして まだPHP3ヶ月目ですが早くもオブジェクト指向で挫折>< ちなみに ・「基礎PHP」 ・「PHP5であなたもウェブアプリが作れる!」 ・「速効!図解プログラミングPHP + MySQL」 を参考書にしています。 分かりやすかったのは基礎PHPです。 掲示版からスケジュール管理に移るところで Smarty関連を追加するため承継とか出てきてなるほどと思いました。 ただソース理解しても自分では何もできないんですけどねw http://medaka.5ch.io/test/read.cgi/php/1172205352/136
137: nobodyさん [sage] 2007/10/07(日) 19:12:30 ID:??? 掲示板の改良はどうします? http://medaka.5ch.io/test/read.cgi/php/1172205352/137
138: nobodyさん [sage] 2007/10/07(日) 21:04:45 ID:??? 丸投げします http://medaka.5ch.io/test/read.cgi/php/1172205352/138
139: nobodyさん [sage] 2007/10/07(日) 21:09:36 ID:??? OOPで作ったやつの ソースとかうpったら なんか色々言ってもらえるんかな? このスレでは http://medaka.5ch.io/test/read.cgi/php/1172205352/139
140: nobodyさん [sage] 2007/10/07(日) 21:46:16 ID:??? >>139 自分も変なソースですけど味見してもらえます? 恥ずかしいです>< http://medaka.5ch.io/test/read.cgi/php/1172205352/140
141: nobodyさん [sage] 2007/10/08(月) 09:30:37 ID:??? >>133 これをどうやって使えばいいんですか http://medaka.5ch.io/test/read.cgi/php/1172205352/141
142: nobodyさん [sage] 2007/10/08(月) 19:27:30 ID:??? なかなか面白いブログを発見しました。 ぜひ皆さんに見てもらって意見聞きたいな^^ http://blogs.itmedia.co.jp/tamaki/2006/06/post_57ab.html http://medaka.5ch.io/test/read.cgi/php/1172205352/142
143: nobodyさん [sage] 2007/10/09(火) 22:34:59 ID:??? MVCのコントローラについてどこまでクラスにするか迷っています・・・ http://medaka.5ch.io/test/read.cgi/php/1172205352/143
144: nobodyさん [sage] 2007/10/10(水) 16:06:50 ID:??? ハァ? http://medaka.5ch.io/test/read.cgi/php/1172205352/144
145: nobodyさん [sage] 2007/10/12(金) 03:46:51 ID:??? 意味わかんね どこまでクラス? http://medaka.5ch.io/test/read.cgi/php/1172205352/145
146: nobodyさん [sage] 2007/11/12(月) 13:32:18 ID:??? まずはモデルでしょ http://medaka.5ch.io/test/read.cgi/php/1172205352/146
147: nobodyさん [] 2007/12/13(木) 08:37:25 ID:Q/a8rTy0 SPLって使ってる人実在するの? http://jp2.php.net/manual/ja/ref.spl.php http://medaka.5ch.io/test/read.cgi/php/1172205352/147
148: nobodyさん [sage] 2007/12/14(金) 02:09:52 ID:??? 例外はよく使う http://medaka.5ch.io/test/read.cgi/php/1172205352/148
149: nobodyさん [sage] 2007/12/19(水) 01:29:29 ID:??? >>147 読み込んでも八割がた無駄なので使わない http://medaka.5ch.io/test/read.cgi/php/1172205352/149
150: nobodyさん [age] 2007/12/23(日) 12:51:26 ID:??? かしゆか誕生日おめでとう! http://www.tkma.co.jp/tjc/j_pop/perfume/profile.html http://medaka.5ch.io/test/read.cgi/php/1172205352/150
151: nobodyさん [sage] 2007/12/24(月) 10:55:41 ID:??? >>149 つりですか? http://medaka.5ch.io/test/read.cgi/php/1172205352/151
152: nobodyさん [] 2007/12/29(土) 00:05:37 ID:4ZpocZiG MVCのCってどうやって書けばいいのかわからんぜ。 http://medaka.5ch.io/test/read.cgi/php/1172205352/152
153: nobodyさん [sage] 2007/12/29(土) 02:00:56 ID:??? その概念中でコントローラーが理解出来ないってやつ初めてみた とりあえずView上で必要な操作を徹底的にControllerに切り離すが良い。 そしてModelからデータを引き出して必要があれば書き込み更新してやりなさい。 http://medaka.5ch.io/test/read.cgi/php/1172205352/153
154: nobodyさん [sage] 2007/12/31(月) 19:44:35 ID:??? ユーザークラスで新規登録処理をして、そのときにユーザークラスの中で プロフィールクラスのオブジェクトを作ってプロフィールの登録もする これってしいて言えば何パターン? http://medaka.5ch.io/test/read.cgi/php/1172205352/154
155: nobodyさん [sage] 2007/12/31(月) 19:47:57 ID:??? ワンパターン http://medaka.5ch.io/test/read.cgi/php/1172205352/155
156: nobodyさん [sage] 2008/01/01(火) 00:16:32 ID:??? パターンというかコンポジションでそ http://medaka.5ch.io/test/read.cgi/php/1172205352/156
157: nobodyさん [age] 2008/01/29(火) 11:18:04 ID:??? 模範解答は無いけれど、以下の相互変換を行うクラス(ChStr)をみんなで 作ってみるという案はどうかな? そして、これが出来たら、ログファイルに保存などの機能をつけ、 wikiみたいに編集が出来る機能を追加していくという感じに。 <編集> ------------------------------------------------------------- = 2ch '''2ch'''とは、総合掲示板のことである。 link:[http://www.2ch.net] ------------------------------------------------------------- <出力> ------------------------------------------------------------- <b><font size="+1">2ch</font></b><br> <b>2ch</b>とは、総合掲示板のことである。<br> link:<a href="http://www.2ch.net">http://www.2ch.net</a><br> ------------------------------------------------------------- http://medaka.5ch.io/test/read.cgi/php/1172205352/157
158: 1 ◆SWtzLesEmM [age] 2008/01/29(火) 11:29:32 ID:??? >>157 OOPの勉強というよりも、どちらかというと正規表現の勉強になるでしょうか? wikiのパーサーつくるなら、既存のwikiスクリプトや、PEARのText_Wikiが参考になるかもしれませんね。 http://www.phppro.jp/news/172 PEAR::Text_Wiki 1.2.0RC1 リリース 2006年10月11日 http://labs.cybozu.co.jp/blog/tsuruoka/anubis/blog_show/18 Text_PukiWikiリリース http://medaka.5ch.io/test/read.cgi/php/1172205352/158
159: nobodyさん [age] 2008/01/29(火) 11:43:55 ID:??? >>158 C++のOOPの勉強として、文字列を簡単に扱うことが出来るクラスを 自作してみるという演習があったので、それをPHPでもやってみようかなと 思ったものです。 Cでは、文字列を結合したり、splitしたりするのが結構大変なので、 この演習が役に立ったなと思っていたのです。 PHPの場合は、関数を使えばそれで終わってしまうので、もう少し ひねりを入れたものを考えて見ました。 正規表現を練習するというよりも、正規表現とhtmlの相互変換をする クラスがあると、プログラムをする際、便利だなという事が実感 出来るのでは?という意味合いです。 (例)正規表現を格納し、html出力する過程。 $text に textarea タグの文字列を格納する。 $str = new ChStr($text); echo "<html><body>"; $str->Write_html(); echo "</body></html>"; ほら、このクラスがあるとレイアウトを変えたりが、やり易い上に 再利用性が高いでしょ?みたいな。 http://medaka.5ch.io/test/read.cgi/php/1172205352/159
160: 1 ◆SWtzLesEmM [age] 2008/01/29(火) 11:47:24 ID:??? OOPの参考になる解説がありました。 PHPのclass、オブジェクト指向プログラミングに関する質問です。 http://q.hatena.ne.jp/1187962431 ↑ 2番の回答者の解説が分かりやすいと思いました。 6番の回答者のサンプルコードも参考になりましたが、これは「インターフェース」の利用方法ではありませんね。>< インターフェイス http://www.phppro.jp/phpmanual/php/language.oop5.interfaces.html あるクラスが実装する必要があるメソッドの種類を、これらのメソッドの実体を定義することなく、指定するコードを作成できるようになります。 インターフェイスはキーワードinterfaceにより定義され、通常のクラスと同様に定義することができますが、メソッドの実装は全く定義されません。 http://medaka.5ch.io/test/read.cgi/php/1172205352/160
161: 1 ◆SWtzLesEmM [age] 2008/01/29(火) 12:00:16 ID:??? >>159 なるほど!(・∀・) 文字列を扱う処理は、いろんなところで出番がありそうですね! wikiの文法(表記方法)が使える掲示板とか作れそう^^ http://medaka.5ch.io/test/read.cgi/php/1172205352/161
162: nobodyさん [age] 2008/01/29(火) 12:04:23 ID:??? ChStr クラス の設計はこんな感じかな。 メンバ private $m_str; // 正規表現文字列を格納する。 コンストラクタ ChStr($str) // 正規表現の文字列を受け取る。 private メソッド ch_to_html() // 正規表現をhtmlに変換する。 public メソッド Write_html() // 格納している文字をhtmlで出力する。 Write_text() // 格納している文字を正規表現で出力する。 --------------------------------------------------- 本当は、ログファイルへの保存や読み取りなどを機能として 考え、そのあたりまで含めたクラスの設計をした方が いいんだろうけれど、まずは簡潔にする方向でいきます。 で、後々拡張の方向で。 http://medaka.5ch.io/test/read.cgi/php/1172205352/162
163: 1 ◆SWtzLesEmM [age] 2008/01/29(火) 12:04:44 ID:??? PHPのインターフェースは、Javaとかのインターフェースとはちょっと違っているみたいですねー。>< (…使ったことないので実感がありませんが^^) PHPでは実装済みのinterfaceを多重に実装できない http://blog.xole.net/article.php?id=589 http://blog.xole.net/article.php?id=597 http://medaka.5ch.io/test/read.cgi/php/1172205352/163
164: 1 ◆SWtzLesEmM [age] 2008/01/29(火) 12:25:09 ID:??? >>162 こんなかんじのプログラムと似ているかもしれませんねー。 60行で作るPHP用テンプレートエンジン http://anond.hatelabo.jp/20071030034313 >テンプレートの中身を置換する >function convert_string($s) ↑置き換えるパターンに応じて、別々のメソッドを用意したら便利でしょうか? = 文字サイズ変更、''' 強調、link: リンクとかの記法の置換を担当するprivateメソッド http://medaka.5ch.io/test/read.cgi/php/1172205352/164
165: 1 ◆SWtzLesEmM [age] 2008/01/29(火) 12:34:03 ID:??? OOPの参考になる解説がありました。 関数、オブジェクト、クロージャ http://d.hatena.ne.jp/brazil/20060131/1138692196 >オブジェクトは、データに処理がくっついたものです。 >array.map()のように、後に後に処理を追加していく書き方は、順にコードを追えるため読みやすく、また書きやすいです。 クロージャっていう仕組みは、PHPにはないですね?>< 大は小を兼ねる…クロージャの代わりにオブジェクトが使えればとりあえずOKかな?(・∀・) http://medaka.5ch.io/test/read.cgi/php/1172205352/165
166: nobodyさん [sage] 2008/01/29(火) 13:15:31 ID:??? >>161 >wikiの文法(表記方法)が使える掲示板とか作れそう^^ PEARのText_Wiki使えばよくね? http://medaka.5ch.io/test/read.cgi/php/1172205352/166
167: nobodyさん [age] 2008/01/29(火) 13:18:38 ID:??? >>164 > 置き換えるパターンに応じて、別々のメソッドを用意したら便利でしょうか? 本来ならば、そうなるでしょうね。それらはすべてprivateで作っておいて、 外部には、一つのインターフェースのみ(この例の場合はWrite_html()がそれに該当) 公開となるでしょう。 記号ごとに別々にメソッドを定義しておけば、記号とhtmlの関係が変わる時は、 どのメソッドを触ればよいかが分かるし、それを変更したことで、 他のメソッドには影響は無かったりします。 (これが構造化プログラムの場合は、目的のソースと目的ではないソースを 見極めるところから始まります。) ------------------------------------------------------------------------- この ChStr に汎用性を持たせる場合は、Write_html()というよりも、 Get_html()とし、html文字列を return する事になるでしょう。 そうすると、別なプログラムで、「出力結果をファイルに保存する」という 使い方も出来ます。しかし、今回は初回なので、Write_html()とし、 メソッド内部で echo 使うことにします。 http://medaka.5ch.io/test/read.cgi/php/1172205352/167
168: nobodyさん [age] 2008/01/29(火) 13:22:48 ID:??? >>166 学ぶために具体的に物を作るのと、実用性を考えて物を作るのは 別だと思う。なので、今回はこれでいいと考えている。 現に、初心者向けの書籍に載っているソースの実用性はゼロだ。 http://medaka.5ch.io/test/read.cgi/php/1172205352/168
169: nobodyさん [age] 2008/01/29(火) 13:59:05 ID:??? とりあえず、全体構成の確認のために書いてみた。 ch_to_html()は、追記の必要性がある。 [chstr.php] <?php class ChStr { // メンバ var $m_str_reg; // 正規表現文字列を格納する。 var $m_str_html; // html文字列を格納する。 // コンストラクタ // 正規表現の文字列を受け取る。 function ChStr($regstr) { $this->m_str_reg = $regstr; $this->ch_to_html(); } // private メソッド // 正規表現をhtmlに変換する。 function ch_to_html() { // 改行を<BR>に変更する。 // nl2br($this->m_str_reg) 使った方がいいかも $this->m_str_html = ereg_replace("\n","<BR>",$this->m_str_reg); } // public メソッド // 格納している文字をhtmlで出力する。 function Write_html() { echo $this->m_str_html; } // 格納している文字を正規表現で出力する。 function Write_text() { echo $this->m_str_reg; } } ?> http://medaka.5ch.io/test/read.cgi/php/1172205352/169
170: nobodyさん [age] 2008/01/29(火) 14:03:31 ID:??? [index.html] 最初に開くファイル。 <html><body> <form method="POST" action="./text.php"><textarea name="reg_text" cols=40 rows=4> あああああ いいいいい ううううう </textarea><br> <input type=submit value=" 送 信 "></form> </body></html> [text.php] <html><body> <?php include("./chstr.php"); $in_text = $_POST["reg_text"]; $chst = new ChStr($in_text); $chst->Write_html(); ?> </body></html> http://medaka.5ch.io/test/read.cgi/php/1172205352/170
171: 1 ◆SWtzLesEmM [sage] 2008/01/29(火) 14:10:04 ID:??? >>166 確かにそうなんですが、「勉強のため」という目的もあるので、自分で作ってみるというのもありでしょうか?^^ でも、答えが分かっている問題を解くのは楽ですね。>Text_wiki 車輪の再発明 - Wikipedia http://ja.wikipedia.org/wiki/%E8%BB%8A%E8%BC%AA%E3%81%AE%E5%86%8D%E7%99%BA%E6%98%8E 車輪の再発明とは、「広く受け入れられ確立した技術や解決法を無視して、同様のものを再び一から作ってしまう事」を意味する ある技術の意味を理解させるために、意図的に車輪の再発明を行わせる場合がある http://medaka.5ch.io/test/read.cgi/php/1172205352/171
172: 1 ◆SWtzLesEmM [age] 2008/01/29(火) 14:19:35 ID:??? wikiとか文字列を処理する仕組みは、「パーサー」とか「構文解析」っていうみたいですね(´∀`) 構文解析 - Wikipedia http://ja.wikipedia.org/wiki/%E6%A7%8B%E6%96%87%E8%A7%A3%E6%9E%90%E5%99%A8 今までにいろんな仕組みが考えられてきたみたい。 …本格的にやると奥が深そうだけど、一度仕組みを勉強しておいたら、いろいろ使えそうな予感!(・∀・) ↓wikiの仕組みを自分で作っている方は結構いるみたいですねー。 PHP用の汎用WikiParser作り中 http://tdiary.ishinao.net/20050323.html RandomNote/PHPについて http://tbox.jpn.org/wiki/rnh/index.php?AboutPage.txt http://medaka.5ch.io/test/read.cgi/php/1172205352/172
173: nobodyさん [age] 2008/01/29(火) 14:21:38 ID:??? 今後の課題と予定 ・ch_to_html() の中身を書く。 ・[text.php] の機能を充実(テキストファイルに保存するなど)させ、wikiを作る。 ・上記とは別に、 ChStr クラスを使い、BBSを作る。 ・ChStr クラスに clear()、SetStr() 等のメソッドをつけ加え、汎用性を持たせる。 http://medaka.5ch.io/test/read.cgi/php/1172205352/173
174: 1 ◆SWtzLesEmM [age] 2008/01/29(火) 14:38:20 ID:??? http://tbox.jpn.org/wiki/rnh/index.php?AboutPage.txt RandomNoteのMain.phpは参考になるでしょうか? preg_match preg_replace array_push array_pop などの関数を使って、文字列の切り貼りをしてるんですねー。 http://medaka.5ch.io/test/read.cgi/php/1172205352/174
175: nobodyさん [sage] 2008/01/29(火) 14:39:05 ID:??? OOPってより単にクラスの使い方書いてるように見えるのはまあいいとして メソッドの中でstringをreturnせずにecho使うのは>>167で書いてるように汎用性って面もあるけど 処理と表示の分離って意味合いもあるからちゃんとstringで返したほうがいいよ http://medaka.5ch.io/test/read.cgi/php/1172205352/175
176: nobodyさん [age] 2008/01/29(火) 15:39:09 ID:??? >>175 > OOPってより単にクラスの使い方書いてるように見えるのはまあいいとして OOPについて説明するとなると、具体的なソースコードとは離れた方が 良くなったりしますからね。 (クラスの使い方書いているように見えるとしても、)PHPでclassを 組む場合のメリットみたいな位置づけで学んでいこうと思っています。 > 処理と表示の分離って意味合いもあるからちゃんとstringで返したほうがいいよ 確かに汎用性以外にそういう目的もありますね。 次のものでstringで返すように書き換えます。 http://medaka.5ch.io/test/read.cgi/php/1172205352/176
177: nobodyさん [age] 2008/01/29(火) 18:16:08 ID:??? htmlのformのコードもクラス化するのが本当の流れんだろうけれどな。 いきなりそれをやると分かりにくくなるかな・・・ http://medaka.5ch.io/test/read.cgi/php/1172205352/177
178: に ◆lKs5QMUHoA [sage] 2008/01/29(火) 19:20:19 ID:??? ChStrクラスのサンプルソースを投稿してた者ですが、 今までnobodyさんで書いてたけど、分かりにくくなるかと思ったので 酉入れるようにしてみます。 >>5に書いてあるように、オブジェクト指向は「変数を保持できる事」が メリットだと思うのですが、これがWebアプリだとどうも実感が無かったりします。 リッチクライアントだと、マウスのクリックに合わせて、メソッドが呼び出され、 そのアプリケーションが終了するまでの間、各種オブジェクトの中の変数に 状態が保持されるという構造なので、そのメリットが感じられるのですが、 Webアプリでは、POSTする度にオブジェクトの変数の状態はリセット されてしまうので、クラスを書いたとしても、結局はグローバル変数から 各種オブジェクトの変数に代入するみたいなコードを書かなくては ならなくなってしまうので、このメリットがあるのかと思ってしまうのです。 これは、勉強不足だからなのでしょうか。。。 http://medaka.5ch.io/test/read.cgi/php/1172205352/178
179: nobodyさん [sage] 2008/01/29(火) 22:51:04 ID:??? >>160 他の人の話のほうがよっぽど核心を突いてるよ http://medaka.5ch.io/test/read.cgi/php/1172205352/179
180: nobodyさん [sage] 2008/01/29(火) 23:05:47 ID:??? >>160のはてなのリンクの4番目の話、2chの別の板でも 読んだことがあるけれど、この話本当なの? 具体的に何処でどういう商売をしての話なんだろうか。 アプリケーションを売る話?それとも開発環境用のソフトを売る話? http://medaka.5ch.io/test/read.cgi/php/1172205352/180
181: nobodyさん [sage] 2008/01/30(水) 21:59:22 ID:??? ピュアな意味でオブジェクトを操作したいなら ボタンのクリックに関する全ての画面遷移に関してserializeとunserializeを管理する必要があるだろ <?php require_once("hiroyuki.class.php"); $hiroyuki = unserialize($_SESSION["hiroyuki"] http://medaka.5ch.io/test/read.cgi/php/1172205352/181
182: nobodyさん [] 2008/01/31(木) 07:20:40 ID:NaJ3keB3 >>178 ユーティリティクラスの再実装みたいな事を熱心にやっても あまり意味が無いと思いますよ。 まさにあなたの言う「いちいち書くのがめんどくさい」のを回避する為に OOPがあるんだと思います・・・ OOPの勉強なら、簡単なWEBフレームワークを自作するのが一番良いよ。 知識の無い段階でいきなりPHPでOOPって無理だと思いますよ。 背伸びせず、まずjavaやC#を学習する方が近道かもしれないよ。 http://medaka.5ch.io/test/read.cgi/php/1172205352/182
183: nobodyさん [sage] 2008/01/31(木) 08:15:31 ID:??? .NET 以降の VisualBasic ってどうなの? http://medaka.5ch.io/test/read.cgi/php/1172205352/183
184: nobodyさん [sage] 2008/01/31(木) 17:31:43 ID:??? MVCモデルにそって、ユーザの入力データと、CSVファイルのデータを 読み込んで表示させるというものを作ってみました。 ファイル:全部で5つ。index.phpを実行する。 cfcontrol.php cfview.php index.php cfmodel.php csv.txt [csv] aaa,bbb,ccc [index.php] <?php include("./cfcontrol.php"); $form_str = $_POST["form"]; $in_str = $_POST["key"]; $form = new CFControl($form_str, $in_str); ?> http://medaka.5ch.io/test/read.cgi/php/1172205352/184
185: nobodyさん [sage] 2008/01/31(木) 17:32:35 ID:??? [cfcontrol.php] <?php include("./cfview.php"); include("./cfmodel.php"); class CFControl{ function CFControl($form_str, $in_str){ if( ($form_str == "")or($form_str == "in") ){ $form = new CFView("index.php","in",""); $form->Write_HTML(); }elseif($form_str == "out"){ $da = new CFModel(); $dat = $da->ReadDat($in_str); $form = new CFView("index.php","out", $dat); $form->Write_HTML(); } } } ?> http://medaka.5ch.io/test/read.cgi/php/1172205352/185
186: nobodyさん [sage] 2008/01/31(木) 17:33:57 ID:??? [cfmodel.php] <?php class CFModel{ var $m_csv_file; // コンストラクタ function CFModel(){ // 読み込むCSVファイルを指定 $this->m_csv_file = "csv.txt"; } // データを取り出す。 function ReadDat($str){ $INFILE = fopen($this->m_csv_file,"r"); $line = fgets($INFILE, 1024); fclose($INFILE); $line = $line . ", " . $str; return $line; } } ?> http://medaka.5ch.io/test/read.cgi/php/1172205352/186
187: nobodyさん [sage] 2008/01/31(木) 17:37:50 ID:??? [cfview.php](1/2) <?php class CFView{ var $m_file; // POSTするファイル名 var $m_type; // 表示するフォームの種類。in か out var $m_line; // 表示するデータ // コンストラクタ function CFView($file, $type, $line){ $this->m_file = $file; $this->m_type = $type; $this->m_line = $line; } // private function in_html(){ echo "<html><body>"; echo '<form method="POST" action="' . $this->m_file . '">'; echo '<input type="hidden" name="form" value="out">'; echo '<input type="text" name="key"><input type="submit" value="送信">'; echo "</form></body></html>"; } http://medaka.5ch.io/test/read.cgi/php/1172205352/187
188: nobodyさん [sage] 2008/01/31(木) 17:39:35 ID:??? [cfview.php](2/2) // private function out_html(){ echo "<html><body>"; echo '<form method="POST" action="' . $this->m_file . '">'; echo '<input type="hidden" name="form" value="in">'; echo "$this->m_line<br>"; echo '<input type="submit" value="戻る"></form></body></html>'; } // public function Write_HTML(){ if($this->m_type == "in"){ $this->in_html(); }elseif($this->m_type == "out"){ $this->out_html(); } } } ?> http://medaka.5ch.io/test/read.cgi/php/1172205352/188
189: nobodyさん [sage] 2008/01/31(木) 17:51:38 ID:??? フレームワーク使えば? http://medaka.5ch.io/test/read.cgi/php/1172205352/189
190: に ◆lKs5QMUHoA [sage] 2008/01/31(木) 19:03:23 ID:??? とりあえず、MVCに分けて枠組みを作ってみたけれど、 これをより抽象化させていって、「継承して使ってください」という 方向にするのか、それとも最初はクラスの数を増やさないように しながら簡単なアプリケーションを作る方向にするべきか。 どっちの方向に持っていったほうがいいのか迷うな。。。 ま、そんなことを考える暇があったら手を動かしてみろという 話なのかもしれないが。。 http://medaka.5ch.io/test/read.cgi/php/1172205352/190
191: nobodyさん [sage] 2008/01/31(木) 19:08:05 ID:??? >>190 自分で考えるのも良いが、君が今やっていることを やってしまっているのが、フレームワークだ。 まず既存のフレームワークがどうなっているのか参考しろ。 http://medaka.5ch.io/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.io/test/read.cgi/php/1172205352/192
193: 192 [sage] 2008/01/31(木) 19:50:52 ID:??? フレームワーク使ってみろっていうのは賛成 疎結合にとかDRYにっていうのがだんだんわかってきた 理解したところで戻ってきて〜の方が結果的に早そう 俺はまだ勉強中だからそこまで行ってないけど http://medaka.5ch.io/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.io/test/read.cgi/php/1172205352/194
195: 192 [sage] 2008/01/31(木) 20:08:35 ID:??? 汚染されちゃうけどコンストラクタで全部の値渡すよりはましじゃないかなあ あとコンパイルするときに全部チェックしてくれる言語とそうじゃない言語ってのもある phpなんだしゆるーくやればいいじゃん なんていうと怒られるかw http://medaka.5ch.io/test/read.cgi/php/1172205352/195
196: に ◆lKs5QMUHoA [sage] 2008/01/31(木) 20:13:09 ID:??? 今調べて知ったのだが、オーバーロードは PHP ではできないらしい。 だったら、コンストラクタで値を渡すよりも、インターフェースで値を 設定するような仕組みになるだろうね。 コンストラクタだと、一度値を設定したら、そのオブジェクトが破棄される まで、再度設定が出来なくなるから。 http://medaka.5ch.io/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.io/test/read.cgi/php/1172205352/197
198: に ◆lKs5QMUHoA [sage] 2008/01/31(木) 20:26:00 ID:??? 私は>>197さんの意見に同意だ。 「このモジュールを使う場合、このように書いてくださいね。」 というコードは、なるべく少ない方がいいからね。 なので、とりあえず設定の値はコンストラクタにいれるという 設計で書いてみた。 http://medaka.5ch.io/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.io/test/read.cgi/php/1172205352/199
200: 192 [sage] 2008/01/31(木) 20:36:05 ID:??? viewに渡すデータはセッタで渡したくならない? あとinなのかoutなのか分岐させるとしたらそれはコントローラ側の仕事なんじゃないかなと思うんだけど違うかな http://medaka.5ch.io/test/read.cgi/php/1172205352/200
201: 192 [sage] 2008/01/31(木) 20:42:33 ID:??? いや、見直したらそう書いてた ごめん気にしないで http://medaka.5ch.io/test/read.cgi/php/1172205352/201
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 693 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.021s