MVCを利用したフレームワークの便利な所は人力で、プログラムの構成が理解しやすかったりする所ですが、オブジェクトを利用したプログラムにも同じようにMVC的なルールを取りいれたらどうだろうと思い、実装してみました。
それぞれ
- _Modelはモデルのみ(データのみ)
- _controlerはデータ処理のみ
- _viewは状況に応じてのアウトプットのみを担当させてみました。
Content.php
<?php
class Content_Model{
protected $data;
function __construct(){
$this->data = array("アイテム1","アイテム2","アイテム3");
}
}
class Content_Controler extends Content_Model{
function get_count(){
return count($this->data);
}
function get_list(){
return $this->data;
}
function get_single($i){
return $this->data[$i];
}
}
class Content_View extends Content_Controler{
function view($id1=0,$id2=0,$id3=0){
switch ($id1) {
case 0:
echo "トップページ用 ";
print_r($this->get_count());
break;
case 1: //
echo "リストページ用 ";
print_r($this->get_list());
break;
case 2; //
echo "個別ページ用 ";
print_r($this->get_single($id2));
break;
case 3: //
echo "認証ページ等 ";
if($id3==1){
echo "○ ログイン中";
}else{
echo "X ログインしてね";
}
break;
}
}
}
//ページ用
$page = array("top"=>"0","list"=>"1","single"=>"2","ninsyou"=>"3");
$content = new Content_View();
//トップページの場合
$content->view($page['top']);
echo "<hr><br>".PHP_EOL;
//リストページの場合
$content->view($page['list']);
echo "<hr><br>".PHP_EOL;
//個別ページの場合
$content->view($page['single'],2);
echo "<hr><br>".PHP_EOL;
//認証ページの場合 ログインしてない
$content->view($page['ninsyou'],2,0);
echo "<hr><br>".PHP_EOL;
//認証ページの場合 ログインしてる
$content->view($page['ninsyou'],2,1);
echo "<hr><br>".PHP_EOL;
効率のいいプログラムにはならないですが、自分ルールの中でもわかりやすくプログラムが組めそうな感じです。
補足として
上記のMVCのパターンを考えれば、コントローラーが出力用にデータを成型してるだけなので、入力処理の部分を別途classで実装(セキュリティも加味する)した方が、整理できてわかりやすいかもしれませんね。
後日、そのパターンも考えてみます。
Content_Controlerを
- Content_Input_Controler
- Content_Output_Controler
- に分けて継承してしまうとかですかね。