ThinkPHP 3.2 以單字母函數聞名,簡潔有力、無處不在。本文彙整 A、B、C、D、F、G、I、L、M、R、S、T、U 13 大核心函數,提供參數說明、多重用法、代碼範例、常見坑點、進階技巧,並修正原文遺漏與錯誤,做為開發時的桌邊速查手冊。
| 函數 | 用途 | 核心特性 |
|---|---|---|
| A | 實例化控制器 | 跨模組/專案、分層控制器、單例 |
| B | 執行行為 | 行為擴充點、支援參數陣列 |
| C | 配置讀寫 | 多層級、批量、快取持久化 |
| D | 實例化模型(自定義優先) | 單例、跨模組、分層模型、自動回退基礎 Model |
| F | 快速檔案快取 | 純檔案、無過期、返回目錄支援、批量刪除 |
| G | 效能剖析 | 標記點、區間耗時/記憶體、精度可調 |
| I | 安全輸入獲取 | 多來源、預設值、多層過濾、NULL 禁用過濾 |
| L | 多語言變數 | 動態設定/獲取、批量、模板輸出 |
| M | 實例化基礎模型 | 無需自定義類、指定表前綴/資料庫/連線、單例 |
| R | 遠端呼叫控制器動作 | 跨模組/專案、參數傳遞、指定控制器層、支援後綴 |
| S | 通用快取 | 多驅動、過期時間、參數陣列、前綴/目錄隔離 |
| T | 模板檔案定位 | 多主題/模組/資源、視圖分層、分隔符/副檔名配置 |
| U | URL 組裝 | 多模式智能生成、參數多格式、路由/偽靜態/子域名支援 |
// 設定單值
C('DB_NAME', 'my_db');
// 批量設定
C(['DB_USER' => 'root', 'DB_PWD' => '123']);
// 獲取
$dbName = C('DB_NAME');
// 獲取二級
$userId = C('USER.USER_ID');
// 全部配置
$all = C();
// 持久化快取(僅批量時)
C($config, 'my_cache_key');
// 讀回快取並合併
$cached = C('', 'my_cache_key');
坑點:持久化僅支援批量陣列模式,單值設定不生效。
| 特性 | D('User') | M('User') |
|---|---|---|
| 尋找類別 | 優先 Model/UserModel,無則回退 Model | 直接實例化 Model 基礎類 |
| 業務邏輯 | 可封裝於自定義 Model | 僅基礎 CRUD |
| 效能 | 需載入類別檔案 | 較輕量 |
| 跨資料庫 | 支援 | 支援(第三參數 DSN/配置名) |
// D 進階:分層模型
$UserLogic = D('User', 'Logic'); // Model/Logic/UserLogic.class.php
$UserService = D('User', 'Service'); // Model/Service/UserService.class.php
// M 進階:指定表前綴、資料庫、連線
$User = M('User', 'tp_'); // 表前綴 tp_
$User = M('db2.User', 'think_'); // db2 資料庫 + 表前綴
$User = M('User', '', 'mysql://u:p@host/db'); // 自定義 DSN
// 來源類型:get/post/param/request/put/session/cookie/server/globals
I('get.id'); // $_GET['id']
I('post.name', '', 'htmlspecialchars'); // 預設值 + 自訂過濾
I('session.user_id', 0); // Session
I('cookie.'); // 全部 $_COOKIE
I('param.id'); // 自動判斷 GET/POST/PUT
I('param.1'); // PATHINFO 參數索引 (URL: /a/b/c → 1=b, 2=c)
I('id'); // 等同 I('param.id')
// 過濾機制(優先級高→低)
// 1. I() 第三參數指定
// 2. DEFAULT_FILTER 配置(預設 htmlspecialchars)
// 3. VAR_FILTERS 全域遞歸過濾(需引用回傳)
// 4. NULL 完全禁用過濾
I('get.raw', '', null); // 取原始值
// 內建驗證過濾器(filter_var)
I('post.email', '', FILTER_VALIDATE_EMAIL);
I('post.age', '', 'int'); // 字串標識對應 filter_list
// 寫入(第三參數支援陣列配置)
S('key', $data, ['expire' => 3600, 'prefix' => 'app_', 'temp' => RUNTIME_PATH . 'cache/']);
// 讀取
$data = S('key', '', ['prefix' => 'app_', 'temp' => RUNTIME_PATH . 'cache/']);
// 刪除
S('key', null, ['prefix' => 'app_']);
// 批量刪除前綴
S('app_*', null);
注意:原文 S('data',$Data,3600,'File',...) 多參數寫法實測無效,必須用陣列配置。
U('User/add'); // 當前模組 add
U('Home/User/add'); // Home 模組
U('Blog/read', ['id' => 1]); // 陣列參數
U('Blog/read', 'id=1&status=1'); // 字串參數
U('/news/1'); // 路由匹配 'news/:id' => 'News/read'
U('Blog/read@blog.example.com'); // 指定子域名
U('Blog/read', '', true, true); // 最後兩參數:偽靜態後綴、是否跳轉、顯示域名
--enable-memory-limit。
A('Module/Controller', 'Layer') → 控制器實例
B('behavior_tag', $params) → 執行行為
C('KEY', 'val') / C(['k'=>'v']) → 配置寫/讀/持久化
D('Model', 'Layer') → 自定義模型實例(單例)
M('Model', 'prefix', 'dsn') → 基礎模型實例(單例)
F('key', $data) / F('key') → 檔案快取寫/讀/刪
G('mark') / G('a','b',6,'m') → 標記/區間耗時(秒)/記憶體(KB)
I('type.var', 'def', 'filter') → 安全輸入獲取
L('LANG_VAR', 'val') / L() → 多語言變數
R('Module/action', $params, 'Layer') → 遠端動作呼叫
S('key', $data, $options) → 通用快取
T('Theme/Controller/action', 'Layer') → 模板路徑
U('address', $params, 'ext') → URL 組裝
ThinkPHP 單字母函數是框架精髓濃縮,掌握其參數變體、優先級、坑點,能大幅提升開發速度與代碼品質。建議將本文列印為速查卡,配合官方手冊與原始碼閱讀,深入理解每個函數背後的設計哲學。