第5回 処理するエリアを切り分けてみよう~実装編~ - OOP講座
がる先生のOOP講座
Lecutures on PHP
第5回 処理するエリアを切り分けてみよう~実装編~ (その1)
5. 処理するエリアを切り分けてみよう~実装編~

前回は「index.phpで集約するよ」に至るまでの理論を書きました。 今回は「index.phpから始まる」実装を、前回の登場人物達をもちいながら行ってみましょう。
まずはマウントポイントであるindex.phpです。
list 1
index.php
1
// 「cgi requestを受け取る君」
2 // XXX PHP でやってくれるので特になにもしない
3
4 // 「門番君」
5 // XXX 必要なら適宜実装をする
6
7 // 「必要なインスタンスを作る君」
8 // DB handle
9 $dbh = DBハンドル取得();
10 // Smarty インスタンス
11 $smarty = Smartyインスタンス作成();
12
13 // 「処理を"実処理してくれる君"に振り分ける君」
14 $class = パラメタなどを見て処理クラス名を取得();
15 $include_filename = 対象classを格納しているファイル名を作成($class);
16
17 // classの取得
18 require_once($include_filename);
19 // 処理する君の作成
20 $main_obj = new $class();
21 // 必要なインスタンスの設定
22 $main_obj->set_dbh($dbh);
23 $main_obj->set_smarty($smarty);
24
25 // メイン処理の実行
26 $main_obj->実行();
27
28 // 「テンプレートファイルと変数群からHTMLを動的に作ってくれる君」
29 // SmartyからHTMLを動的に作成
30 $output_html = $smarty->fetch($main_obj->get_template_filename());
31
32 // 「cgi responseを出力してくれる君」
33 // XXX 文字コード変換などをするならここで
34 echo $output_html;
35
36 // 「最後の後片付けとお掃除君」
37 // XXX ログを吐いたりするならここで
これで、後はメイン処理を書くだけです。
つぎは、再帰バージョンを少し書いてみましょう。
list 2
index.php
1
// 「cgi requestを受け取る君」
2 // XXX PHP でやってくれるので特になにもしない
3
4 // 「門番君」
5 // XXX 必要なら適宜実装をする
6
7 // 「必要なインスタンスを作る君」
8 // DB handle
9 $dbh = DBハンドル取得();
10 // Smarty インスタンス
11 $smarty = Smarty インスタンス作成();
12
13 // 「処理を"実処理してくれる君"に振り分ける君」
14 $class = パラメタなどを見て処理クラス名を取得();
15
16 // ここでloopを発生させる
17 while(true) {
18 //
19 $include_filename = 対象classを格納しているファイル名を作成($class);
20
21 // classの取得
22 require_once($include_filename);
23 // 処理する君の作成
24 $main_obj = new $class();
25 // 必要なインスタンスの設定
26 $main_obj->set_dbh($dbh);
27 $main_obj->set_smarty($smarty);
28
29 // メイン処理の実行
30 $main_obj->実行();
31
32 // もし「もう一回、別のメインクラスを呼びたい」なら「is処理終了」でfalseが返ってくる
33 if (true === $main_obj->is処理終了()) {
34 //
35 break;
36 }
37 // else
38 $class = $main_obj->get_次に呼びたいメインクラスのクラス名();
39 }
40
41 // 「テンプレートファイルと変数群からHTMLを動的に作ってくれる君」
42 // SmartyからHTMLを動的に作成
43 $output_html = $smarty->fetch($main_obj->get_template_filename());
44
45 // 「cgi responseを出力してくれる君」
46 // XXX 文字コード変換などをするならここで
47 echo $output_html;
48
49 // 「最後の後片付けとお掃除君」
50 // XXX ログを吐いたりするならここで

プログラムの差違としては比較的小さな差違なのですが、Webアプリケーションを作る際において、結構便利な瞬間があります。
例として「入力 -> 完了」という、一番基本的な流れを書いてみましょう。
まず初めにプログラムを書いてしまい、その後で流れの説明をしていきたいと思います。
list 3
input.class.php より
1
public function 実行() {
2 $this->set_template_filename(入力用テンプレートファイル名);
3 return ;
4 }
list 4
fin.class.php より
1
public function 実行() {
2 // validate(入力の正当性)の確認
3 $flg = true; // エラー用フラグ。一つでもエラーがあったらここをfalseに
4
5 // チェック
6 if ('' === $_POST['name']) {
7 // エラー!!
8 $flg = false;
9 //
10 $this->get_smarty()->assign('if_error_name', 1);
11 $this->get_smarty()->assign('name', $_POST['name']);
12 }
13
14 // 問題あった?
15 if (false === $flg) {
16 $this->get_smarty()->assign('if_error', 1);
17 $this->set_次に呼びたいメインクラスのクラス名('input');
18 return ;
19 }
20
21 // 問題がなかったらしいので登録
22 XXX 略
なんていう風にかけます。
…といきなり書かれても「え?………動くの?」と思うことも多いかと思いますので、、簡単に流れを確認してみましょう。
- 1
- 2




ページのトップへ


GETのままでは検索エンジンのロボットが拾ってくれなかったためにSEO対策として有効だと言われていますね。