PHPでOOP (894レス)
PHPでOOP http://medaka.5ch.net/test/read.cgi/php/1172205352/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
222: 1 ◆SWtzLesEmM [sage] 2008/02/02(土) 16:44:49 ID:??? PHPでイベントドリブンですか?(・∀・) …こんなのありました。^^ PHP イベントドリブン に一致する日本語のページ 約 10,600 件 ●PRADO http://www.pradoframework.com/wiki/index.php/Ja:What_is_PRADO >PRADO はコンポーネントベースかつイベントドリブンなウェブアプリケーションを開発するためのPHP5フレームワークです。 ●S2Prado.PHP5 http://labs.s2php5.jp/s2prado.php5 http://blog.xole.net/article.php?id=553 >S2Baseの方は待望のPRADO対応。 ●Piece Framework http://trac.piece-framework.com/piece-unity/wiki/ja/Start >Piece_Unityは、Visual BasicやDelphiのようなイベントドリブンなフレームワークです。 ●Delphi for PHP http://www.codegear.com/jp/products/delphi/php http://orz.qzlab.com/yamagw/index.php?Delphi%20for%20PHP%A4%CE%BB%C8%A4%A4%CA%FD >イベントドリブンなロジックの実装が容易に実現する。 ●Pharon http://pharon.lolipop.jp/ >最大の特徴は、wizard によりイベントドリブン型のスケルトンを自動作成することです。 http://medaka.5ch.net/test/read.cgi/php/1172205352/222
223: 1 ◆SWtzLesEmM [sage] 2008/02/02(土) 17:00:36 ID:??? インターネット越しにイベント処理をさせるのが、WEBプログラミングの特徴ですね。 イベントドリブンは、PHPよりもむしろFlash/Flexとかで使われる仕組みなのでしょうか? レガシーの中心でのOOP http://kaede.to/~canada/doc/2005/07/06/ >Webプログラミングにおいて、ブラウザとのやり取りがレガシー(古典的)なデータ交換に過ぎず、これがWebプログラミングを難しくしている >Webは1ページごとに毎回セッションが起動し、ドキュメントを表示するとすぐ終了する。 >オブジェクト指向プログラミングにおける利点の1つであるイベントドリブンなプログラミングは不可能だ。 >何しろ1セッションに1イベントしか発生しないのだから。 >と同時にセッション状態を保存する必要も出てくる。 http://www.adobe.com/jp/devnet/flex/articles/framework_beta_print.html >インタラクティブ性に優れたイベントドリブンなインタフェイス http://www.atmarkit.co.jp/fwcr/rensai/flex203/01.html >イベント処理によってアプリケーションを構築する手法はイベント駆動型(イベントドリブン)と呼ばれます。 http://www.azul.systems-noel.jp/item_9.html >Flex2はイベントドリブンなので、ビューに起こったイベントをコントローラのリスナでキャッチするように意識すれば、MVCの分離はきれいにできるようになっています。 >なんかほんとにJavaのSwingを使ってるような気分になりますね。 http://bitmap.dyndns.org/blog/archives/001215.html >イベントドリブンモデルには、主に以下の 4 つのオブジェクトが登場する。 http://medaka.5ch.net/test/read.cgi/php/1172205352/223
224: 1 ◆SWtzLesEmM [sage] 2008/02/02(土) 17:05:16 ID:??? >>220 >・Control クラスのメソッド内で、Model クラスと View クラスのインスタンスを生成する。 こっちの方が、Controlにまとまっている分だけスッキリしており、分かりやすいコードになるんじゃないでしょうか? http://medaka.5ch.net/test/read.cgi/php/1172205352/224
225: nobodyさん [sage] 2008/02/02(土) 17:24:12 ID:??? >>224 レスありがとうございます。 1番目の方にすると、Modelクラスから取得したデータを Viewクラスに渡すことになるので、その分余計にメモリや CPUを消費してしまうのでは、と心配になって聞いてみましたが、 考えてみると、コードの見易さなどを優先するのがOOPですので、 そちらの方がいいですね。 でも、フレームワークのソースなどを見ていると、 各クラスが、メンバに、別のクラスへのリファレンスを持ってたり するので、もっと理論に従った組み方があるのかも、と思っています。 http://medaka.5ch.net/test/read.cgi/php/1172205352/225
226: nobodyさん [sage] 2008/02/02(土) 17:36:37 ID:??? >>184 ファイル:全部で8つ。index.phpを実行する。 抽象クラスと具象クラスに実装を分けてみました。 csv.txt(※前回と同じ) index.php cfcontrol.php アブストラクトとして実装 cfview.php cfmodel.php コンクリートとして実装 data_model.php index_view.php output_view.php http://medaka.5ch.net/test/read.cgi/php/1172205352/226
227: nobodyさん [sage] 2008/02/02(土) 17:38:02 ID:??? [config.php] <?php // 実際の処理を行うスクリプトをインクルード include("./index_view.php"); include("./output_view.php"); include("./data_model.php"); // 最初に呼ばれるビューのプレフィックス設定 define ('INDEX_VIEW_PREFIX', "Index"); // モデルクラスのプレフィックス設定 define ('MODEL_PREFIX', "Data"); ?> [index.php] <?php include("./cfcontrol.php"); $view_key = $_POST["view_key"]; $data = $_POST["data"]; $app = new CFControl($view_key, $data); $app->Execute(); ?> http://medaka.5ch.net/test/read.cgi/php/1172205352/227
228: nobodyさん [sage] 2008/02/02(土) 17:39:03 ID:??? [cfmodel.php] <?php class CFModel { var $file_name; // 読み込むファイル名 function CFModel() {}// コンストラクタ function Execute($param) // パブリックメソッド { return $this->_OnExecute($param); } function _OnExecute($param) // 仮想メソッド { trigger_error('オーバーライドしてね。', E_USER_ERROR); } } ?> [cfview.php] <?php class CFView { var $file_name; // POSTするファイル名 function CFView() {} // コンストラクタ function Execute($param) // パブリックメソッド { return $this->_OnExecute($param); } function _OnExecute($param) // 仮想メソッド { trigger_error('オーバーライドしてね。', E_USER_ERROR); } } ?> http://medaka.5ch.net/test/read.cgi/php/1172205352/228
229: nobodyさん [sage] 2008/02/02(土) 17:39:58 ID:??? [cfcontrol.php] <?php include("./cfview.php"); include("./cfmodel.php"); include("./config.php"); class CFControl { var $_view_key; // 呼び出すビューのプレフィックス var $_data; // モデルに渡すデータ function CFControl($view_key, $data) // コンストラクタ { $this->_view_key = $view_key; $this->_data = $data; } function Execute() // パブリックメソッド { // モデルオブジェクト動的生成 $model_class_name = MODEL_PREFIX . 'Model'; $model = new $model_class_name(); $param = $model->Execute($this->_data); // ビューオブジェクト動的生成 $view_key = $this->_view_key; if ($view_key == "") $view_key = INDEX_VIEW_PREFIX; $view_class_name = $view_key . 'View'; $form = new $view_class_name(); $form->Execute($param); } } ?> http://medaka.5ch.net/test/read.cgi/php/1172205352/229
230: nobodyさん [sage] 2008/02/02(土) 17:40:48 ID:??? [data_model.php] <?php class DataModel extends CFModel { function DataModel() // コンストラクタで取得先のファイル設定 { $this->file_name = 'csv.txt'; } function _OnExecute($param) // オーバーライドメソッド { $INFILE = fopen($this->file_name,"r"); $data = fgets($INFILE, 1024); fclose($INFILE); $data = $data . ", " . $param; return $data; } } ?> http://medaka.5ch.net/test/read.cgi/php/1172205352/230
231: nobodyさん [sage] 2008/02/02(土) 17:41:48 ID:??? [index_view.php] <?php class IndexView extends CFView { function IndexView() // コンストラクタでPOST先のファイル設定 { $this->file_name = 'index.php'; } function _OnExecute($param) // オーバーライドメソッド { echo "<html><body>"; echo '<form method="POST" action="' . $this->file_name . '">'; echo '<input type="hidden" name="view_key" value="Output">'; echo '<input type="text" name="data"><input type="submit" value="送信">'; echo "</form></body></html>"; } } ?> http://medaka.5ch.net/test/read.cgi/php/1172205352/231
232: nobodyさん [sage] 2008/02/02(土) 17:42:29 ID:??? [output_view.php] <?php class OutputView extends CFView { function OutputView() // コンストラクタでPOST先のファイル設定 { $this->file_name = 'index.php'; } function _OnExecute($param) // オーバーライドメソッド { echo "<html><body>"; echo '<form method="POST" action="' . $this->file_name . '">'; echo '<input type="hidden" name="form" value="Index">'; echo "$param<br>"; echo '<input type="submit" value="戻る"></form></body></html>'; } } ?> http://medaka.5ch.net/test/read.cgi/php/1172205352/232
233: に ◆lKs5QMUHoA [sage] 2008/02/02(土) 19:04:13 ID:??? >>226-232 サンプルソースありがとうございます。 抽象クラスの書き方に慣れてますね。私はこのあたりを しっかりとやってなかったのでちょっと苦手です。 ま、しっかりと勉強していきたいと思います。(^^; ソースを読んでいて、1点気になったので質問をしたいのですが、 class CFView と class CFModel において、以下のように パブリックメソッドと仮想メソッドを作り、パブリックメソッドから 仮想メソッドを実行する形式にソースを書いた理由は何でしょうか? 出来ましたら、この設計にした意図を教えていただきたいと思います。 function Execute($param) // パブリックメソッド { return $this->_OnExecute($param); } function _OnExecute($param) // 仮想メソッド { trigger_error('オーバーライドしてね。', E_USER_ERROR); } http://medaka.5ch.net/test/read.cgi/php/1172205352/233
234: に ◆lKs5QMUHoA [sage] 2008/02/02(土) 19:24:37 ID:??? >>218 レスありがとうございます。 イベントドリブンそのものは、VBでWindowsアプリを組んでやったことがあるので すぐに入れたのですが、Webアプリを作る際、イベントドリブンでしかやった事が 無いというのは致命的だと思ったので、PerlやPHPでやってみています。 (ASP.NETは、便利ではあるが、IISを使えとか、.NET Frameworkを使えとか 非常に限定される。) 構造化プログラミングで、あまり命名規則を考えずにプログラムをしていると、 グローバル変数や関数が多くなった時、その把握が出来なくなったりする わけなのですが、そういう苦労する体験をした後、OOPを習うと、その便利な部分が 見えてくるわけです。OOPは経験による結論的な理論だな、と理解できるわけです。 その理解のために、とりあえず、苦労をする方法(PHP で 0 から OOP)で やってみているのです。 今は、このように考えています。 http://medaka.5ch.net/test/read.cgi/php/1172205352/234
235: nobodyさん [sage] 2008/02/02(土) 19:59:40 ID:??? 人間て暖かいにゃぁ ポカ・ポカ テンキュー http://medaka.5ch.net/test/read.cgi/php/1172205352/235
236: nobodyさん [sage] 2008/02/02(土) 21:30:36 ID:??? >>233 PHP4では全てパブリックだけど例えばC#では以下の実装になるんだ public object Execute(object parpam) protected virtual object _OnExecute(object parpam) CFControlから_OnExecuteメソッドを隠蔽する意図なんだよ。 _OnExecuteはCFViewやCFModelのサブクラスにだけ見えれば十分なんだ。 http://medaka.5ch.net/test/read.cgi/php/1172205352/236
237: に ◆lKs5QMUHoA [sage] 2008/02/03(日) 11:17:44 ID:??? >>235 暖かいですねぇ。 >>236 なるほど。ありがとう。 http://medaka.5ch.net/test/read.cgi/php/1172205352/237
238: に ◆lKs5QMUHoA [sage] 2008/02/03(日) 14:47:56 ID:??? ソースを読んでいて気になった点がありますので、質問させていただきます。 includeの構成についてです。まず、各ファイルに書かれているincludeの部分をまとめます。 [index.php] include("./cfcontrol.php"); [cfcontrol.php] include("./cfview.php"); include("./cfmodel.php"); include("./config.php"); [config.php] // 実際の処理を行うスクリプトをインクルード include("./index_view.php"); include("./output_view.php"); include("./data_model.php"); これは、MVCフレームワークは、以下の3つのファイルであり、 [cfcontrol.php][cfmodel.php][cfview.php] それを拡張する形で、残りの6つのファイルを付け加えた形 なので、このようなincludeの構成ということでよろしいのでしょうか。 http://medaka.5ch.net/test/read.cgi/php/1172205352/238
239: に ◆lKs5QMUHoA [sage] 2008/02/03(日) 14:50:55 ID:??? includeをばらばらとさせるよりも、以下のように整理したほうが となんとなく思ったりもしたのです。 [index.php] include("./config.php"); [config.php] include("./cfcontrol.php"); include("./cfview.php"); include("./cfmodel.php"); include("./index_view.php"); include("./output_view.php"); include("./data_model.php"); http://medaka.5ch.net/test/read.cgi/php/1172205352/239
240: nobodyさん [sage] 2008/02/03(日) 15:27:26 ID:??? MVC?な俺にはここが一番わかりやすかった 実例コードが載ってるのがいい PHPでMVC第1回:前編 ttp://www.stackasterisk.jp/tech/php/phpMvc01_01.jsp http://medaka.5ch.net/test/read.cgi/php/1172205352/240
241: nobodyさん [sage] 2008/02/03(日) 15:52:25 ID:??? javaのサイト見ろよ http://medaka.5ch.net/test/read.cgi/php/1172205352/241
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 653 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.009s