index.php) - 全局啟動器<?php
include("core/ini.php");
initializer::initialize();
$router = loader::load("router");
dispatcher::dispatch($router);
僅 4 行代碼,卻串聯起框架的生命週期:環境初始化 → 配置加載 → 路由解析 → 控制器分發。
core/ini.php - 環境基石<?php
set_include_path(get_include_path() . PATH_SEPARATOR . "core/main");
function __autoload($className) {
require_once "{$className}.php";
}
core/main 加入尋找路徑,後續 require/include 及 __autoload 將優先在此目錄查找。__autoload:PHP 5 魔術方法,實例化未定義類時自動觸發,按約定映射文件名 (ClassName.php) 載入,實現「零配置」自動加載。initializer::initialize() - 路徑擴展器class initializer {
public static function initialize() {
set_include_path(get_include_path().PATH_SEPARATOR . "core/main");
set_include_path(get_include_path().PATH_SEPARATOR . "core/main/cache");
set_include_path(get_include_path().PATH_SEPARATOR . "core/helpers");
set_include_path(get_include_path().PATH_SEPARATOR . "core/libraries");
set_include_path(get_include_path().PATH_SEPARATOR . "app/controllers");
set_include_path(get_include_path().PATH_SEPARATOR . "app/models");
set_include_path(get_include_path().PATH_SEPARATOR . "app/views");
// include_once("core/config/config.php");
}
}
將框架核心層 (core) 與應用層 (app) 所有關鍵目錄全部納入 Include Path。這意味著:
loader::load("router") 可直接找到 core/main/router.php。__autoload 會自動在對應 app/ 子目錄尋找。loader::load("router") - 類加載器雖未給出 loader 代碼,但結合上下文可推測其職責:
router.php)。require。dispatcher::dispatch($router) - 請求分發核心核心邏輯 (推測) 包含:
$router 解析 $_SERVER['REQUEST_URI'],確定 Module、Controller、Action 及參數。loader 載入控制器類 (如 NewsController),創建實例。$controller->$action($params)。| 特性 | 實現方式 | 優勢 |
|---|---|---|
| 約定優於配置 | 目錄結構 + __autoload + Include Path | 零 XML/YAML 配置,新增類即用 |
| 單一入口 | index.php 統一入口 | 便於安全控制、URL 美化、流程監控 |
| 關注點分離 | Core(框架核心) / App(業務邏輯) 分層 | 框架可升級不影響業務,團隊協作清晰 |
| 靜態工廠模式 | initializer::initialize(), loader::load() | 無需實例化工具類,全局可訪問 |