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

CodeIgniter 框架源碼深度分析 (一):執行流程、核心類庫與中文註釋完整版

     編輯:PHP 綜合知識

分析背景

CodeIgniter (CI) 輕量、結構清晰,適合源碼研讀。本文從 index.php 入口開始,逐步追蹤核心類載入、路由解析、控制器實例化全流程,並將原英文註釋翻譯為中文。

完整執行流程圖譜

  1. index.php
    • 定義系統/應用路徑常量 (BASEPATH, APPPATH)
    • 載入 codeigniter/CodeIgniter.php
  2. CodeIgniter.php (前台控制器)
    • 載入全域函數 Common.php (load_class, get_config, log_message 等)
    • 載入相容性函數 Compat.php
    • 載入應用常量 config/constants.php
    • 設定錯誤處理、關閉 magic_quotes_runtime
    • 實例化核心類 (單例模式 load_class):
      1. Benchmark (效能標記)
      2. Hooks (擴展點)
      3. Config (配置管理)
      4. URI (URL 解析)
      5. Router (路由分派)
      6. Output (輸出緩存/壓縮)
      7. Input (輸入過濾/XSS 清理)
      8. Language (多語言)
    • 檢查頁面緩存,命中則直接輸出
    • 載入 Controller 基類 (不實例化)
    • 根據路由結果載入對應控制器檔案
    • 實例化控制器 $CI = new $class() → 觸發 _ci_initialize() 載入 Loader、Model、View 等
    • 執行控制器方法
    • 關閉資料庫連線、輸出最終內容

核心類職責速查表

類別關鍵方法/屬性職責
Benchmarkmark(), elapsed_time(), memory_usage()效能分析標記
Hooks_initialize(), _call_hook(), _run_hook()系統擴展點 (pre_system, pre_controller 等)
Configload(), item(), site_url(), set_item()配置檔載入與存取
URIsegment(), rsegment(), uri_to_assoc()URL 片段解析與存取
Router_set_routing(), _parse_routes(), set_class()路由規則解析、控制器/方法決定
Outputset_output(), cache(), _display(), _write_cache()輸出緩存、壓縮、最終輸出
Inputget(), post(), cookie(), xss_clean(), _sanitize_globals()輸入獲取、XSS 過濾、全域變數清理
Controller_ci_initialize(), _ci_scaffolding()超類基礎,載入 Loader、Model、View、資料庫

關鍵設計模式

  • 單例模式:load_class() 靜態變數快取實例,確保核心類唯一
  • 前台控制器:CodeIgniter.php 統一入口,協調全流程
  • 超類模式:Controller 實例化時將所有核心類掛載為屬性 ($this->load, $this->db 等)
  • 鉤子系統:在關鍵節點插入用戶腳本,不修改核心

後續分析預告

  • CI 超類結構與 MVC 實現細節
  • 資料庫類 (DB_driver, DB_result, Active Record) 實現
  • XSS 過濾類 (Input::xss_clean()) 深度解析
  • Loader 類載入機制 (Library, Model, Helper, View)

源碼下載

完整中文註釋版源碼:ci的執行流程.txt (下載後改副檔名為 .php)

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved