首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 繼承應用:工廠模式依權限回傳不同操作類

     編輯:PHP 綜合知識

場景

文章頁面根據登入者身分(訪客/作者)顯示不同操作連結(僅閱讀 / 含編輯、刪除)。

類結構

// 基礎操作(訪客)
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 強制實作共用方法,避免呼叫不存在方法。
  • 字串輸出建議使用 Heredoc/Nowdoc 提升可讀性。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved