ThinkPHP 3.2 內建系統函式
前言
ThinkPHP 中本身有一些內建的系統函式,可以直接使用這些函式來加快開發,其系統函式定義,所在位置是:
ThinkPHP/Common/common.php
由於系統函式較多,本篇只做簡單的陳列,後面會分章節詳細講述這些函式的使用; 如果覺得更新太慢,你也可以直接上 ThinkPHP 從官方網站上獲取資訊。
函式列表
以下不完全收錄:
字母函式
單字母行數一般是常用的功能,能處理較多的功能。
函式名稱 | 函式說明 | 函式例子 |
---|---|---|
A 函式 | 例項化控制器 | |
B 函式 | 執行某個行為 | |
C 函式 | 用於讀取配置資訊 | |
D 函式 | 例項化模型 | |
F 函式 | 快速快取設定和存取 | |
G 函式 | 除錯統計 | |
I 函式 | 安全獲取系統輸入變數 | |
L 函式 | 設定和獲取語言變數 | |
M 函式 | 例項化模型(無需定義模型類) | |
N 函式 | 計數器 | |
R 函式 | 直接呼叫控制器的操作方法 | |
S 函式 | 快取設定和存取 | |
U 函式 | URL地址生成 |
其他函式
除了強大的單字母函式以外,還有一些系統輔助函式,也可以幫助你方便開發。
函式名稱 | 函式說明 | 函式例子 |
---|---|---|
cookie 函式 | Cookie 操作 | |
import 函式 | 類庫匯入 | |
session 函式 | Session 操作 | |
tag 函式 | 處理標籤擴充套件 | 專案開始標籤的呼叫,tag('app_begin'); |
參考資料
官方函式列表: http://www.thinkphp.cn/info/309.html
第三方整理: http://www.zzbaike.com/wiki/ThinkPHP-函式參考-系統函式庫
[稿] ThinkPHP 系統函式: I 函式詳解
正如你所見到的一樣,I方法是ThinkPHP眾多單字母函式中的新成員,其命名來自於英文Input(輸入),主要用於更加方便和安全的獲取系統輸入變數,可以用於任何地方,用法格式如下:
I('變數型別.變數名',['預設值'],['過濾方法'])
變數型別是指請求方式或者輸入型別,包括:
變數型別 含義
get 獲取GET引數
post 獲取POST引數
param 自動判斷請求型別獲取GET、POST或者PUT引數
request 獲取REQUEST 引數
put 獲取PUT 引數
session 獲取 $_SESSION 引數
cookie 獲取 $_COOKIE 引數
server 獲取 $_SERVER 引數
globals 獲取 $GLOBALS引數
注意:變數型別不區分大小寫。
變數名則嚴格區分大小寫。 預設值和過濾方法均屬於可選引數。
用法
我們以GET變數型別為例,說明下I方法的使用:
echo I('get.id'); // 相當於 $_GET['id']
echo I('get.name'); // 相當於 $_GET['name']
支援預設值:
echo I('get.id',0); // 如果不存在$_GET['id'] 則返回0
echo I('get.name',''); // 如果不存在$_GET['name'] 則返回空字串
採用方法過濾:
echo I('get.name','','htmlspecialchars'); // 採用htmlspecialchars方法對$_GET['name'] 進行過濾,如果不存在則返回空字串
支援直接獲取整個變數型別,例如:
I('get.'); // 獲取整個$_GET 陣列
用同樣的方式,我們可以獲取post或者其他輸入型別的變數,例如:
I('post.name','','htmlspecialchars'); // 採用htmlspecialchars方法對$_POST['name'] 進行過濾,如果不存在則返回空字串
I('session.user_id',0); // 獲取$_SESSION['user_id'] 如果不存在則預設為0
I('cookie.'); // 獲取整個 $_COOKIE 陣列
I('server.REQUEST_METHOD'); // 獲取 $_SERVER['REQUEST_METHOD']
param變數型別是框架特有的支援自動判斷當前請求型別的變數獲取方式,例如:
echo I('param.id');
如果當前請求型別是GET,那麼等效於 $_GET['id'],如果當前請求型別是POST或者PUT,那麼相當於獲取 $_POST['id'] 或者 PUT引數id。 並且param型別變數還可以用數字索引的方式獲取URL引數(必須是PATHINFO模式引數有效,無論是GET還是POST方式都有效),例如: 當前訪問URL地址是
http://serverName/index.php/New/2013/06/01
那麼在 ThinkPHP 3.1 中我們可以通過
echo I('param.1'); // 輸出2013
echo I('param.2'); // 輸出06
echo I('param.3'); // 輸出01
在 ThinkPHP 3.2 中應該通過這樣方式來獲取
echo I('path.1'); // 輸出2013
echo I('path.2'); // 輸出06
echo I('path.3'); // 輸出01
事實上,param變數型別的寫法可以簡化為:
I('id'); // 等同於 I('param.id')
I('name'); // 等同於 I('param.name')
變數過濾
使用I方法的時候 變數其實經過了兩道過濾,首先是全域性的過濾,全域性過濾是通過配置VAR_FILTERS引數,這裡一定要注意,3.1版本之後,VAR_FILTERS引數的過濾機制已經更改為採用array_walk_recursive方法遞迴過濾了,主要對過濾方法的要求是必須引用返回,所以這裡設定htmlspecialchars是無效的,你可以自定義一個方法,例如:
function filter_default(&$value){
$value = htmlspecialchars($value);
}
然後配置:
'VAR_FILTERS'=>'filter_default'
如果需要進行多次過濾,可以用:
'VAR_FILTERS'=>'filter_default,filter_exp'
filter_exp方法是框架內建的安全過濾方法,用於防止利用模型的EXP功能進行注入攻擊。
因為VAR_FILTERS引數設定的是全域性過濾機制,而且採用的是遞迴過濾,對效率有所影響,所以,我們更建議直接對獲取變數過濾的方式,除了在I方法的第三個引數設定過濾方法外,還可以採用配置DEFAULT_FILTER引數的方式設定過濾,事實上,該引數的預設設定是:
'DEFAULT_FILTER' => 'htmlspecialchars'
也就說,I方法的所有獲取變數都會進行htmlspecialchars過濾,那麼:
I('get.name'); // 等同於 htmlspecialchars($_GET['name'])
同樣,該引數也可以支援多個過濾,例如:
'DEFAULT_FILTER' => 'strip_tags,htmlspecialchars'
I('get.name'); // 等同於 htmlspecialchars(strip_tags($_GET['name']))
如果我們在使用I方法的時候 指定了過濾方法,那麼就會忽略DEFAULT_FILTER的設定,例如:
echo I('get.name','','strip_tags'); // 等同於 strip_tags($_GET['name'])
I方法的第三個引數如果傳入函式名,則表示呼叫該函式對變數進行過濾並返回(在變數是陣列的情況下自動使用array_map進行過濾處理),否則會呼叫PHP內建的filter_var方法進行過濾處理,例如:
I('post.email','',FILTER_VALIDATE_EMAIL);
表示 會對$_POST['email'] 進行 格式驗證,如果不符合要求的話,返回空字串。 (關於更多的驗證格式,可以參考 官方手冊的filter_var用法。) 或者可以用下面的字元標識方式:
I('post.email','','email');
可以支援的過濾名稱必須是filter_list方法中的有效值(不同的伺服器環境可能有所不同),可能支援的包括:
- int
- boolean
- float
- validate_regexp
- validate_url
- validate_email
- validate_ip
- string
- stripped
- encoded
- special_chars
- unsafe_raw
- url
- number_int
- number_float
- magic_quotes
- callback
在有些特殊的情況下,我們不希望進行任何過濾,即使DEFAULT_FILTER已經有所設定,可以使用: I('get.name','',NULL);
一旦過濾引數設定為NULL,即表示不再進行任何的過濾。
相關文章
- ThinkPHP 3.2 系統預設變數/常量PHP變數
- 內建函式函式
- ThinkPHP3.2開發的視訊系統PHP
- 基於THINKPHP3.2 開發 商城系統PHP
- webgl內建函式--指數函式Web函式
- webgl內建函式--通用函式Web函式
- MySQL 內建函式MySql函式
- hive內建函式Hive函式
- php 內建函式PHP函式
- Mysql內建函式MySql函式
- 14、內建函式函式
- awk內建函式函式
- js內建函式JS函式
- Thinkphp 3.2【onethink 1.0】搭建 影視搜尋系統PHP
- Python內建函式Python函式
- python 內建函式Python函式
- Pyhton內建函式大全函式
- Oracle 內建函式三Oracle函式
- Oracle 內建函式一Oracle函式
- Oracle 內建函式二Oracle函式
- 18. 內建函式函式
- 2.13Python基礎語法(11):系統內建函式Python函式
- webgl內建函式--幾何函式與矩陣函式Web函式矩陣
- webgl內建函式--向量函式與紋理查詢函式Web函式
- Hive函式(內建函式+自定義標準函式UDF)Hive函式
- ThinkPHP 3.2主要配置PHP
- Python內建函式示例Python函式
- python常用內建函式Python函式
- 1.5.5 Python內建函式Python函式
- Python內建函式(一)Python函式
- Python內建函式(二)Python函式
- Python 內建函式大全Python函式
- python內建函式大全Python函式
- Oracle SQL 內建函式大全OracleSQL函式
- python 常用內建函式Python函式
- c++中內建函式C++函式
- c++內建函式物件C++函式物件
- python內建函式——sortedPython函式