文章頁面根據登入者身分(訪客/作者)顯示不同操作連結(僅閱讀 / 含編輯、刪除)。
// 基礎操作(訪客)
class OperationLimit {
static $instance;
public static function getObject() {
if (!(self::$instance instanceof self)) self::$instance = new self();
return self::$instance;
}
public function getReadLink($name) {
return "<a href='post/$name.php' class='readmore'>Read More</a>";
}
}
// 進階操作(作者)繼承基礎
class OperationUnlimit extends OperationLimit {
static $instance;
public static function getObject() {
if (!(self::$instance instanceof self)) self::$instance = new self();
return self::$instance;
}
public function getEditLink($name) {
return "<a href='post/$name.php?do=edit' id='$name'>Edit</a>";
}
public function getDeleteLink($name) {
return "<a href='javascript:deletePost(\"$name\")' id='del_$name'>Delete</a>";
}
}
// 工廠類:根據狀態回傳對應實例
class LimitFactory {
public static function getLimitObject($status) {
switch ($status) {
case 0: return OperationLimit::getObject(); // 訪客
case 1: return OperationUnlimit::getObject(); // 作者
default: return OperationLimit::getObject();
}
}
}
$obj = LimitFactory::getLimitObject($session->getStatus()); // 0 或 1
echo $obj->getReadLink('hello');
echo $obj->getDeleteLink('hello'); // 訪客物件無此方法,若呼叫會報錯,實際應配合介面設計
getObject() 確保取得正確實例(PHP 靜態綁定特性)。OperationInterface 強制實作共用方法,避免呼叫不存在方法。