|
注意:變數類型不區分大小寫。
變數名則嚴格區分大小寫。
預設值和過濾方法均屬於可選參數。
官方的程式碼如下:
function I($name,$default='',$filter=null,$datas=null) {
static $_PUT=null;//使用static定義了一個靜態宣告類別成員定義了一個靜態宣告類別成員或方法為static,就可以不實例化類別而直接存取。不能透過一個物件來存取其中的靜態成員(靜態方法除外)
if(strpos($name,'/')){ // 指定修飾符 strpos()函數為尋找字串在另一個字符字串中第一次出現的位置,找出'/'在參數nam中第一次出現的位置
list($name,$type) =explode('/',$name,2 );//explode(separator,string,limit)函數意義為根據特定字元將字串打撒為數組,limit為傳回的陣列的個數
}elseif(C('VAR_AUTO_STRING')){ // 預設強制轉換為字串 //呼叫了ThinkPHP的C方法
$type = 's';
}
//小結 此if意義為判斷參數是否帶有/
if(strpos($name,'.')) { // 指定參數來源 //查看是否帶.!
list($method,$name) = explode('.',$name,2);
}else{ // 確保$method )) {
//strtolower()把所有字元轉換成小寫利用switch來定位方法的型別
case 'get' : 約break;
case 'post' :
$input =& $_POST;
break; : case 'put'
break; : ull($_PUT)){
parse_str(file_get_contents('php://input'), $ _PUT);
}
$input
= case 'param' : switch($_SERVER['REQUEST_METHOD']) { //$_SERVER[' REQUEST_METHOD' 使用請求的方法可以利用取得的方法名,使用swith()來定位方法的類型,此處想法為遞歸
case 'POST':
break; case 'PUT' : if(is_null($_PUT)){ _
}
$input
break;
default:
} break; case 'path' : if(!empty($_SERVER['PATH_INFO'])){
$ depr = C('URL_PATHINFO_DEPR'); $input = explode($depr,) } break;
case 'request' : = & $_REQUEST;
break; case 'session' : _ break; case 'cookie' :
$input = ;
case 'server' :
$input =& $_SERVER;
$input =& $GLOBALS;
break;
break;
$input =& $datas;
break; default:
if(''==$name) { // 獲取全部變量
$data = $input;
$filters = isset($filter)?$filter:C('DEFAULT_FILTER');//使用了三目運算子 isset()函數一般用來偵測變數是否設定,empty()用來判斷是否為空白
if($filters) {
if(is_string($filters) = explode(',' ,$filters);
}
foreach($filters as $filter){
inkPHP的參數濾波方法array_map_recursive foreach()為循環函數
} }
}elseif(isset($input[$name])) { // 取值操作
$data = $input[$name]; ') ;
if($filters) {
if(is_string($filters)){
if(1 !== preg_match($filters,(string )$data)){ //
preg_match()用來配對正規表示式
// 支援正規驗證$default) ? $default : null;
} explode( ',',$filters); }
}elseif(is_int($filters)){
$filters = array($filters);
}
if(is_array($filters)){
foreach($filters as $filter){
if(function_exists($filter)) {
$filter,$data) : $filter($data); // 參數過濾
}else{
data = filter_var($data,is_int($filter) ? $filter : filter_id($filter));
return isset($default) ? $default : null;
}
}
}
}
if(!empty($type)){//使用switch判斷type的類型
switch(strtolower($type)){
: $data =
(array)$data; break;
case 'd': 🜎/ 數字 =
(int)$data; break;
case 'f':// 浮點
$data =
(float)$data;=
(float)$data;= case 'b':
// 布林
$data =(boolean)$data;
break; $data = (string)$data; { // 變數預設值
$data = isset($default)?$default:null; } oc);
}
I方法主要是用來取得前台傳給後台的值,方法定義了四個參數,只有一個是必須的,此參數為所要取得的名稱,其他都是可以變的。 以上標紅的便是自己看程式碼過程中的記得一些知識點。
功能:安全的獲取input傳過來的參數
實現思路:
如果提交的時候跟上了類型,則按指定的類型處理,如果沒有跟上指定類型,則根據服務器變量來確定類型。
透過過濾來確保提交的資料的安全性。
版權聲明:本文為部落客原創文章,未經部落客允許不得轉載。
以上就介紹了ThinkPHP原始碼學習之I方法,包括了方面的內容,希望對PHP教程有興趣的朋友有所幫助。