- 1 名前:1 ◆SWtzLesEmM mailto:age [2007/02/23(金) 13:35:52 ID:???]
- PHPを使ってプログラミングするとき、
プロシージャ指向(手続き型、構造化プログラミング)でもできますが、 オブジェクト指向を使った場合の恩恵を享受するために、 PHPでオブジェクト指向プログラミングの勉強をしてみましょう。 <目的> PHP5でオブジェクト指向プログラミングを行なうための知識を習得する。 (PHP4のOOPもOK、このスレが1000に行く前にPHP6が出たらPHP6のOOPもOK) <方向性> ・このスレは、プログラミング初心者、PHP初心者の勉強の場として利用することを前提にします。 ・PHPのOOPの話題に限定します。 (Ruby、Python、Javaなど他言語のOOPについては、その言語のスレッドでお願いします。) ・PHPのOOP学習に役立つ本、WEBサイトの紹介をお願いします。 <その他> ・略記は、「OO」=「オブジェクト指向」、「OOP」=「オブジェクト指向プログラミング」でお願いします。 ・質問をする人はなるべくトリップを付けましょう。 ・荒らし、煽り、叩き、気違いは無視・無干渉でお願いします。 このスレで、今日から貴方もOOP!!!\(^o^)/
- 226 名前:nobodyさん mailto: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
- 227 名前:nobodyさん mailto: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(); ?>
- 228 名前:nobodyさん mailto: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); } } ?>
- 229 名前:nobodyさん mailto: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); } } ?>
- 230 名前:nobodyさん mailto: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; } } ?>
- 231 名前:nobodyさん mailto: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>"; } } ?>
- 232 名前:nobodyさん mailto: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>'; } } ?>
|

|