ThinkPHP 內建 8 個單字母快捷函數,涵蓋控制器實例化、模型操作、緩存、語言、配置、文件存儲、URL 組裝、對象實例化,極大提升開發效率。本文逐一解析參數、返回值與進階用法。
| 函數 | 全稱 | 核心功能 |
|---|---|---|
| A | Action | 實例化控制器 (支持跨模塊/分組) |
| D | Model | 實例化模型 (自動驗證、單例) |
| S | Cache | 統一緩存接口 (多驅動透明切換) |
| L | Lang | 多語言變量獲取/設置 |
| C | Config | 配置讀寫 (支持二維陣列、不區分大小寫) |
| F | File | 簡單類型文件緩存讀寫 (var_export 序列化) |
| U | URL | URL 組裝 (自動適配路由模式、偽靜態) |
| I | Instance | 快速實例化任意類 (單例模式) |
$action = A('User'); // 等同 new UserAction(); 自動引入、單例
$action = A('User', 'Admin'); // 跨分組實例化 Admin 模塊的 UserAction
特性:自動載入類文件、單例模式避免重複實例化。
// 定義模型類
class UserModel extends Model {}
// 實例化並操作
$User = D('User'); // 映射表 prefix_user
$User->find(1); // 查主鍵 1
$User->score = '(score+1)'; // 字段自增寫法
$User->save();
D('User')->setField('name', 'hehe', 'id=2'); // 單字段快速更新
D vs M 差異:
D() 需模型類文件,自動讀取驗證規則,單例。M() 無需模型類,直接操作表,無自動驗證 (可動態賦值實現),非單例。S('data', $Data); // 寫入永久緩存
S('data', $Data, 3600); // 寫入 3600 秒
$Data = S('data'); // 讀取
S('name', null); // 刪除
底層自動適配 File、Memcache、Redis 等驅動,業務代碼零耦合。
L('USER_INFO', '用戶信息'); // 設置
L('USER_INFO'); // 獲取
L(['USER_INFO'=>'用戶信息','ERROR_INFO'=>'錯誤信息']); // 批量
C('USER_AUTH_ON', true); // 設置
C('USER_AUTH_ON'); // 獲取
C(['USER_AUTH_ON'=>true]); // 批量
C('USER.USER_TYPE', 1); // 二維陣列寫法 (v1.5+)
C('USER.USER_AUTH_ON');
配置鍵名不區分大小寫。
S(),但固定文件存儲、不可指定驅動、目錄獨立 (Runtime/Data/)。U('User/add'); // 當前模塊 add
U('Home/User/add'); // 跨分組
U('Blog/read?id=1'); // 參數字符串
U('Blog/cate', ['cate_id'=>1]); // 參數陣列
U('Blog/cate?cate_id=1&status=1');// 混合寫法
模板中使用 {:U('...')},環境遷移零修改模板。
$obj = I('MyClass'); // 單例實例化,等同 new MyClass() 但自動單例