ThinkPHP函式詳解 I方法

2022-04-06 15:29:14 字數 3133 閱讀 5085

thinkphp的i方法是3.1.3版本新增的,如果你是之前的3.*版本的話,可以直接參考使用3.1快速入門教程系列的變數部分。(該用法將會在將來的版本中廢棄,事實上,如果你仍然還在使用該方式會有警告錯誤提示)正如你所見到的一樣,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方法的使用: echoi('get.id');//相當於$_get['id'] echoi('get.name');//相當於$_get['name']

複製**

支援預設值: echoi('get.id',0);//如果不存在$_get['id']則返回0 echoi('get.name','');//如果不存在$_get['name']則返回空字串

複製**

採用方法過濾: echoi('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變數型別是框架特有的支援自動判斷當前請求型別的變數獲取方式,例如: echoi('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

複製**

那麼我們可以通過 echoi('param.1');//輸出2013 echoi('param.2');//輸出06 echoi('param.3');//輸出01

複製**

事實上,param變數型別的寫法可以簡化為: i('id');//等同於i('param.id') i('name');//等同於i('param.name')

複製**

使用i方法的時候 變數其實經過了兩道過濾,首先是全域性的過濾,全域性過濾是通過配置var_filters引數,這裡一定要注意,3.1版本之後,var_filters引數的過濾機制已經更改為採用array_walk_recursive方法遞迴過濾了,主要對過濾方法的要求是必須引用返回,所以這裡設定htmlspecialchars是無效的,你可以自定義乙個方法,例如: functionfilter_default(&$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的設定,例如: echoi('get.name','','strip_tags');//等同於strip_tags($_get['name'])

複製**

i方法的第三個引數如果傳入函式名,則表示呼叫該函式對變數進行過濾並返回(在變數是陣列的情況下自動使用array_map進行過濾處理),否則會呼叫php內建的filter_var方法進行過濾處理,例如: i('post.email','',filter_validate_email);

複製**

表示 會對$_post['email'] 進行 格式驗證,如果不符合要求的話,返回空字串。

ThinkPHP函式詳解 I方法

其命名來自於英文input 輸入 主要用於更加方便和安全的獲取系統輸入變數,可以用於任何地方,用法格式如下 i 變數型別.變數名 預設值 過濾方法 變數型別是指請求方式或者輸入型別,包括 變數型別 含義get 獲取get引數 post 獲取post引數 param 自動判斷請求型別獲取get pos...

ThinkPHP函式詳解 I方法

正如你所見到的一樣,i方法是thinkphp眾多單字母函式中的新成員,其命名來自於英文input 輸入 主要用於更加方便和安全的獲取系統輸入變數,可以用於任何地方,用法格式如下 i 變數型別.變數名 預設值 過濾方法 變數型別是指請求方式或者輸入型別,包括 變數型別 含義get 獲取get引數 po...

ThinkPHP函式詳解 I方法

正如你所見到的一樣,i方法是thinkphp眾多單字母函式中的新成員,其命名來自於英文input 輸入 主要用於更加方便和安全的獲取系統輸入變數,可以用於任何地方,用法格式如下 i 變數型別.變數名 預設值 過濾方法 變數型別是指請求方式或者輸入型別,包括 變數型別 含義get 獲取get引數 po...