| ゼンド・ジャパン株式会社 技術情報コンテンツ | ||
MVCPHPのスクリプトは、HTMLに埋め込む形で、断片的に書かれる事が多い。 実際に出版されている入門書や雑誌の特集記事の大半が、そのような記述をしている。 ここでは、PHPの一般的な記述方法を全て忘れ、より効率的な開発を実現するためのコーディング方法を説明する。 MVCの考え方MVCとは、Model, View, Controllerの3つの構成で設計されている。これは、スクリプトを3つの役割に分割し、各スクリプトが何を処理しているのかを明確にするためである。 それぞれ、順を追って説明する。 Model(モデル)ビジネスロジックを処理するスクリプト。 このスクリプトは、要求された情報を取得して、変数などに保持する。 それ以外の処理は一切行わない。 エラーが発生した場合も、その情報をプロパティに持つなどするに留まり、それ以上の処理を行ってはならない。 次のスクリプトは、モデルのサンプルである。 <?php
class FooModel {
var $template;
var $extensions;
var $functions;
function FooModel()
{
$this->template = 'default.tpl';
$this->extensions = get_loaded_extensions();
}
function exec()
{
$name = isset($_GET['name']) ? $_GET['name'] : 'standard';
$this->functions = get_extension_funcs($name);
}
}
?>
View(ビュー)ビジネスロジックで得た情報を画面に出力するスクリプト。 テンプレートエンジン(Smartyなど)を用いて、目的のデザインで出力する。 それ以外の処理は一切行わない。 エラーが発生した場合は、ブラウザへの出力を行わず、エラー画面を出力するのみに留まり、それ以上の処理を行ってはならない。 次のスクリプトは、ビューのサンプルである。 <?php
include_once('Smarty.class.php');
class FooView {
function FooView()
{
}
function display($obj)
{
$smarty =& new Smarty();
/* この行に Smarty の諸設定を記述して下さい */
$smarty->assign(get_object_vars($obj));
$smarty->display($obj->template);
}
}
?>
Controller(コントローラ)ファンクションなどを判別し、ModelとViewを呼び出すスクリプト。 全体の流れをコントロールするに留まり、それ以外の処理を行ってはならない。 次のスクリプトは、コントローラのサンプルである。 <?php
include_once('FooModel.php');
include_once('FooView.php');
class FooController {
function FooController()
{
}
function run()
{
$model =& new FooModel();
$model->exec();
$view =& new FooView();
$view->display($model);
}
}
$ctrl =& new FooController();
$ctrl->run();
?>
MVCの流れ
|