官方文檔列出的 ThinkPHP 3.2 完整加載流程共 70 步,本文逐步註釋關鍵節點:入口文件、常量定義、引導類、模式/配置/別名/行為加載、調試模式、應用初始化、URL 路由分發、控制器執行、視圖渲染、緩存讀寫、日誌記錄,適合框架原理深度學習與問題排查。
index.php<?php
// 1. PHP 版本檢查
if (version_compare(PHP_VERSION, '5.3.0', '<')) die('require PHP > 5.3.0 !');
// 2. 開啟調試模式(開發建議開啟,部署關閉)
define('APP_DEBUG', true);
// 3. 定義應用目錄
define('APP_PATH', './Application/');
// 4. 引入框架入口(核心啟動點)
require './ThinkPHP/ThinkPHP.php';
| 階段 | 步驟範圍 | 核心動作 |
|---|---|---|
| 環境準備 | 1-4 | 版本檢查、常量定義、引入 ThinkPHP.php |
| 框架引導 | 5-7 | 記錄啟動時間/內存、定義系統常量、載入 Think\Think 並執行 start() |
| 基礎設施 | 8-10 | 錯誤/自動加載機制、Storage 初始化、部署模式檢查編譯緩存 |
| 配置加載 | 11-22 | 讀取模式定義、核心文件、慣例配置、應用配置、別名、行為、語言包、生成編譯緩存、調試配置、狀態配置、目錄檢查 |
| 應用啟動 | 23 | Think\App::run() 入口 |
| 行為觸發 | 24, 26, 40, 47, 53, 59, 65, 68 | app_init、path_info、url_dispatch、app_begin、action_begin、view_begin、view_parse、template_filter、view_filter、view_end、action_end、app_end 等標籤位監聽執行綁定行為 |
| URL 路由分發 | 25-39 | Dispatcher 分發、PATH_INFO 識別、域名部署綁定、路由檢測、後綴檢測、參數綁定 |
| 控制器執行 | 41-58 | 模塊/控制器/操作解析、空控制器/空操作 fallback、前置操作、參數綁定、模板渲染分支 |
| 視圖渲染 | 49-64 | View::fetch() 解析模板、主題識別、模板引擎編譯緩存、內容過濾替換、輸出渲染、靜態緩存讀寫 |
| 收尾 | 66-70 | 後置操作、頁面 Trace 顯示、日誌存儲 |
Think\Think:框架引導、啟動入口、編譯緩存生成。Think\App:應用運行主流程、行為觸發調度。Think\Dispatcher:URL 解析、路由分發、模塊/控制器/操作定位。Think\View:模板定位、引擎解析、緩存讀寫、輸出渲染。Think\Storage:數據存儲抽象(文件、Memcache、Redis 等)。APP_DEBUG = true:不讀取編譯緩存 (~runtime.php),每次請求重新加載配置、重新編譯路由、模板,便於開發即時生效。APP_DEBUG = false:優先讀取編譯緩存,大幅提升啟動速度,生產必須關閉。熟悉這 70 步驟,能從宏觀理解框架請求生命週期,定位「配置不生效、路由不匹配、模板不更新、行為不執行」等疑難雜症。