PHPオブジェクト指向実践

掲示板

基本の仕組みに乗せる

indexと同じように、掲示板のページも基本の仕組みに乗せてみます。
基本的には初級編の掲示板でbbs.phpに直接書いていた処理をSiteProcessを継承したクラスに書くだけのことです。

<?php

require_once ROOT . '/system/bbs/BbsLogic.php';

class BbsProcess extends SiteProcess
{
    public function main()
    {
        $dataPath = DATA_ROOT . '/bbs.dat';
        $bbs = new BbsLogic($dataPath);

        $this->data['parent_no'] = 0;
        $this->data['message'] = '';
        
        // 返信ボタンがクリックされた場合
        if (true == isset($_POST['res'])) {
            $this->data['parent_no'] = $_POST['parent_no'];
            $this->data['message'] = sprintf('No.%sへの返信です', $this->data['parent_no']);
        }
        
        // 書き込みボタンがクリックされた場合
        if (true == isset($_POST['write'])) {
            $bbs->write($_POST);
            header('Location: ' . $_SERVER['SCRIPT_NAME']);
            exit;
        }
        
        // 削除ボタンがクリックされた場合
        if (true == isset($_POST['del'])) {
            $bbs->delete($_POST);
            header('Location: ' . $_SERVER['SCRIPT_NAME']);
            exit;
        }
        
        // 記事データ取得
        $this->data['threads'] = $bbs->getThreadData();
    }
}

?>

表示用のデータは全て、クラスのフィールドである$this->dataにハッシュとして保存します。

メインスクリプト

メインスクリプトはどんな処理でも同じ記述となるように設計しているので、indexとほぼ同じになります。

<?php
define('ROOT', '・・・');
require_once ROOT . '/system/bbs/BbsProcess.php';
$proc = new @CBbsProcess@()
$proc->exec();
$data = $proc->getData();
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style type="text/css">
div.messages {
    width:800px;
}
div.parent {
    border:1px solid #888888;
    margin:20px 0 0 0;
    padding:10px;
}
div.parent div.message {
    margin:10px 10px 10px 30px;
}
div.child {
    border-top:1px solid #888888;
    margin:10px 10px 0 30px;
    padding:10px;
}
div.child div.message {
    margin:10px 10px 10px 30px;
}
span.message {
    color:#FF0000;
}
form {
    display:inline;
    margin:0;
    padding:0;
}
</style>
</head>
<body>

<form method="post" action="">
  <input type="text" name="name" /><br />
  <input type="text" name="title"