ThinkPHP源碼學習之I方法

WBOY
發布: 2016-07-29 09:16:16
原創
1168 人瀏覽過

PHP新人一個,最近在做一個項目,用的是ThinkPHP,想往深處學習,特意學習ThinkPHP的源碼並作筆記,以記錄這些容易忘記的東西,廢話不多說,開始。

官網說明:

I方法是ThinkPHP眾多單字母函數中的新成員,其命名來自於英文Input(輸入),主要用於更方便和安全的獲取系統輸入變量,可以用於任何地方,用法格式如下:

I('變數類型.變數名稱',['預設值'],['過濾方法'])

變數類型是指請求方式或輸入類型,包括:

請求類型取得GET、POST或PUT參數request取得REQUEST 參數put取得PUT 參數ses$p. OOKIE 參數server取得$ _SERVER 參數globals取得$GLOBALS參數

注意:變數類型不區分大小寫。
變數名則嚴格區分大小寫。
預設值和過濾方法均屬於可選參數。

官方的程式碼如下:

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教程有興趣的朋友有所幫助。

變數型 意義
get 取得GET參數
相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板