示範註冊表模式三種作用域(請求、會話、應用層)、前端控制器結合命令模式實現統一入口、應用程式助手載入設定檔等企業級架構基礎組件。
提供系統級物件全域存取點,採單例模式實作。
class Registry {
private static $instance;
private $request;
private function __construct() {}
static function instance() { /* 單例 */ }
function getRequest() { return $this->request; }
function setRequest(Request $r) { $this->request = $r; }
}
$_SESSION[__CLASS__],跨請求持久Data/ 目錄),支援快取失效偵測(檔案修改時間)Controller::run() 為唯一入口:
ApplicationHelper 載入 XML 設定寫入 ApplicationRegistryRequest 物件(支援 HTTP/CLI 參數)並存入 RequestRegistryCommandResolver 依 Request->cmd 解析對應 Command 子類別Command->execute(Request),內部再呼叫 doExecute() 與 disPlay() 載入視圖// Command 抽象基類
abstract class Command {
final function __construct() {}
function execute(Request $request) { $this->doExecute($request); }
abstract function doExecute(Request $request);
function disPlay(Request $request) { /* 載入對應 View */ }
}
// CommandResolver 解析器
class CommandResolver {
function getCommand(Request $request) {
$cmd = $request->getProperty('cmd');
// 載入對應 Command 類別檔,驗證繼承關係,回傳實例
}
}
// ApplicationHelper 設定載入器
class ApplicationHelper {
function init() {
if (!ApplicationRegistry::getDSN()) $this->getOptions();
}
private function getOptions() {
$xml = simplexml_load_file($this->config);
ApplicationRegistry::setDSN([$xml->dsn->__toString()]);
}
}
// 入口檔 index.php
Controller::run();
此架構展現「註冊表」統一資源存取、「前端控制器」集中請求分派、「命令模式」封裝業務邏輯與視圖選擇,為大型 PHP 專案提供清晰分層基礎。