www.997755comthinkphp I方法取传参


 

  1 /**    2  * 获取输入参数 支持过滤和默认值    3  * 使用方法:    4  * <code>    5  * I('id',0); 获取id参数 自动判断get或者post    6  * I('post.name','','htmlspecialchars'); 获取$_POST['name']    7  * I('get.'); 获取$_GET    8  * </code>    9  * @param string $name 变量的名称 支持指定类型   10  * @param mixed $default 不存在的时候默认值   11  * @param mixed $filter 参数过滤方法   12  * @param mixed $datas 要获取的额外数据源   13  * @return mixed   14  */   15 function I($name,$default='',$filter=null,$datas=null) {   16     if(strpos($name,'/')){ // 指定修饰符   17         list($name,$type)     =    explode('/',$name,2);   18     }elseif(C('VAR_AUTO_STRING')){ // 默认强制转换为字符串   19         $type   =   's';   20     }   21     if(strpos($name,'.')) { // 指定参数来源   22         list($method,$name) =   explode('.',$name,2);   23     }else{ // 默认为自动判断   24         $method =   'param';   25     }   26     switch(strtolower($method)) {   27         case 'get'     :   $input =& $_GET;break;   28         case 'post'    :   $input =& $_POST;break;   29         case 'put'     :   parse_str(file_get_contents('php://input'), $input);break;   30         case 'param'   :   31             switch($_SERVER['REQUEST_METHOD']) {   32                 case 'POST':   33                     $input  =  $_POST;   34                     break;   35                 case 'PUT':   36                     parse_str(file_get_contents('php://input'), $input);   37                     break;   38                 default:   39                     $input  =  $_GET;   40             }   41             break;   42         case 'path'    :      43             $input  =   array();   44             if(!empty($_SERVER['PATH_INFO'])){   45                 $depr   =   C('URL_PATHINFO_DEPR');   46                 $input  =   explode($depr,trim($_SERVER['PATH_INFO'],$depr));               47             }   48             break;   49         case 'request' :   $input =& $_REQUEST;   break;   50         case 'session' :   $input =& $_SESSION;   break;   51         case 'cookie'  :   $input =& $_COOKIE;    break;   52         case 'server'  :   $input =& $_SERVER;    break;   53         case 'globals' :   $input =& $GLOBALS;    break;   54         case 'data'    :   $input =& $datas;      break;   55         default:   56             return NULL;   57     }   58     if(''==$name) { // 获取全部变量   59         $data       =   $input;   60         $filters    =   isset($filter)?$filter:C('DEFAULT_FILTER');   61         if($filters) {   62             if(is_string($filters)){   63                 $filters    =   explode(',',$filters);   64             }   65             foreach($filters as $filter){   66                 $data   =   array_map_recursive($filter,$data); // 参数过滤   67             }   68         }   69     }elseif(isset($input[$name])) { // 取值操作   70         $data       =   $input[$name];   71         $filters    =   isset($filter)?$filter:C('DEFAULT_FILTER');   72         if($filters) {   73             if(is_string($filters)){   74                 $filters    =   explode(',',$filters);   75             }elseif(is_int($filters)){   76                 $filters    =   array($filters);   77             }   78                79             foreach($filters as $filter){   80                 if(function_exists($filter)) {   81                     $data   =   is_array($data) ? array_map_recursive($filter,$data) : $filter($data); // 参数过滤   82                 }elseif(0===strpos($filter,'/')){   83                     // 支持正则验证   84                     if(1 !== preg_match($filter,(string)$data)){   85                         return   isset($default) ? $default : NULL;   86                     }   87                 }else{   88                     $data   =   filter_var($data,is_int($filter) ? $filter : filter_id($filter));   89                     if(false === $data) {   90                         return   isset($default) ? $default : NULL;   91                     }   92                 }   93             }   94         }   95         if(!empty($type)){   96             switch(strtolower($type)){   97                 case 'a':    // 数组   98                     $data     =    (array)$data;   99                     break;  100                 case 'd':    // 数字  101                     $data     =    (int)$data;  102                     break;  103                 case 'f':    // 浮点  104                     $data     =    (float)$data;  105                     break;  106                 case 'b':    // 布尔  107                     $data     =    (boolean)$data;  108                     break;  109                 case 's':   // 字符串  110                 default:  111                     $data   =   (string)$data;  112             }  113         }  114     }else{ // 变量默认值  115         $data       =    isset($default)?$default:NULL;  116     }  117     is_array($data) && array_walk_recursive($data,'think_filter');  118     return $data;  119 }

相关文章