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

ThinkPHP 3.2 單字母函數大全:A/B/C/D/F/G/I/L/M/R/S/T/U 完整用法速查手冊

     編輯:PHP 綜合知識

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模板檔案定位多主題/模組/資源、視圖分層、分隔符/副檔名配置
UURL 組裝多模式智能生成、參數多格式、路由/偽靜態/子域名支援

重點函數深度解析

C 函數:配置中心

// 設定單值
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 vs M:模型實例化兩大派

特性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

I 函數:輸入過濾瑞士刀

// 來源類型: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 函數:快取正確姿勢

// 寫入(第三參數支援陣列配置)
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 函數:URL 組裝大師

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);   // 最後兩參數:偽靜態後綴、是否跳轉、顯示域名

常見誤區與最佳實踐

  1. A/D/R 跨專案調用:目錄結構必須同級,命名空間衝突風險高,建議改用 API/服務層解耦。
  2. F 快取無過期:長期專案需自行實作清理機制,或改用 S/Redis。
  3. G 剖析記憶體:需 PHP 編譯支援 --enable-memory-limit。
  4. I 過濾順序:第三參數 > DEFAULT_FILTER > VAR_FILTERS,NULL 最高優先級禁用所有。
  5. U 路由優先:定義路由後,U() 自動匹配生成美觀 URL,無需手動拼接。

快速查詢卡片(列印備用)

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 單字母函數是框架精髓濃縮,掌握其參數變體、優先級、坑點,能大幅提升開發速度與代碼品質。建議將本文列印為速查卡,配合官方手冊與原始碼閱讀,深入理解每個函數背後的設計哲學。

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