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

ThinkPHP 輸入獲取利器:I()、U()、$this->post() 完整用法指南

     編輯:PHP 綜合知識

前言

ThinkPHP (TP) 提供多種輸入獲取方式,理解其差異能寫出更安全、可維護的程式碼。本文針對 TP 3.1+ 版本詳細說明。

一、原生超全域變數 $_POST/$_GET

  • 優點:效能最高、語法原生。
  • 缺點:不會自動過濾 XSS,需手動 htmlspecialchars() 或 I()。

二、控制器內建方法 $this->_post()/$this->_get()

// 預設已執行 htmlspecialchars()
$name = $this->_post('name');        // 取單一欄位
$all  = $this->_post();              // 取全部 POST 陣列

// 第二參數指定預設值
$page = $this->_get('page', 1);

注意:TP 3.2 起標記為 deprecated,建議改用 I()。

三、統一輸入函數 I() (TP 3.1.3+ 推薦)

// 語法:I('變數名', '預設值', '過濾方法')
$username = I('username');                    // 預設 htmlspecialchars
$age      = I('age', 0, 'intval');            // 強制轉整數
$tags     = I('tags', [], 'trim');            // 陣列元素去空白
$raw      = I('post.raw_data', '', 'strip_tags'); // 移除 HTML 標籤

// 明確指定來源
I('get.id');        // 等同 $_GET['id']
I('post.name');     // 等同 $_POST['name']
I('request.token'); // 自動檢查 $_POST → $_GET → $_COOKIE

內建過濾器:htmlspecialchars (預設)、intval、floatval、trim、strip_tags、addslashes 等,也可傳入自訂函數名。

四、URL 產生函數 U()

// 基本用法
U('User/profile');                    // 當前模組 User 控制器 profile 方法
U('Admin/User/edit', ['id' => 5]);    // 帶參數
U('Home/Index/index', '', '.html');   // 偽靜態後綴
U('Api/Index', [], '', true, 'api.example.com'); // 跨域/多域名

// 參數順序:'模組/控制器/方法', 參數陣列, 後綴, 是否跳轉, 域名

優點:自動根據路由配置、URL 模式 (PATHINFO/REWRITE/兼容模式) 產生正確連結,避免硬編碼。

五、最佳實踐總結

場景推薦方式理由
表單提交處理I('post.')自動過濾、支援預設值、程式碼可讀
API 參數驗證I('get.id', 0, 'intval')型別轉換+預設值一行搞定
模板輸出連結{:U('User/view', ['id'=>$user['id']])}路由變更不需改模板
極高效能需求$_POST + 手動過濾避免函數呼叫開銷 (極少見)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved