第5回 処理するエリアを切り分けてみよう~実装編~ - OOP講座

PHP講座 HTML×CSS 初級編

がる先生の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


Pick Up Q&A

Q
動的なURLを静的に見せる方法
 このエントリーをはてなブックマークに追加 
A
普通に考えて、mod_rewrite でしょうね。 http://www.nishishi.com/blog/2006/01/mod_rewrite_url.html...

>>続きを読む

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

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)