ѡ̳

 找回密码
 ע
搜索
查看: 149|回复: 0
打印 上一主题 下一主题

thinkphp公共函数之I函数

[复制链接]

789

主题

1158

帖子

4197

积分

Ա

Rank: 9Rank: 9Rank: 9

积分
4197
跳转到指定楼层
¥
发表于 2017-11-12 18:56:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源码
  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($method,$name) =   explode('.',$name,2);
  18.     }else{ // 默认为自动判断
  19.         $method =   'param';
  20.     }
  21.     switch(strtolower($method)) {
  22.         case 'get'     :   $input =& $_GET;break;
  23.         case 'post'    :   $input =& $_POST;break;
  24.         case 'put'     :   parse_str(file_get_contents('php://input'), $input);break;
  25.         case 'param'   :
  26.             switch($_SERVER['REQUEST_METHOD']) {
  27.                 case 'POST':
  28.                     $input  =  $_POST;
  29.                     break;
  30.                 case 'PUT':
  31.                     parse_str(file_get_contents('php://input'), $input);
  32.                     break;
  33.                 default:
  34.                     $input  =  $_GET;
  35.             }
  36.             break;
  37.         case 'path'    :   
  38.             $input  =   array();
  39.             if(!empty($_SERVER['PATH_INFO'])){
  40.                 $depr   =   C('URL_PATHINFO_DEPR');
  41.                 $input  =   explode($depr,trim($_SERVER['PATH_INFO'],$depr));            
  42.             }
  43.             break;
  44.         case 'request' :   $input =& $_REQUEST;   break;
  45.         case 'session' :   $input =& $_SESSION;   break;
  46.         case 'cookie'  :   $input =& $_COOKIE;    break;
  47.         case 'server'  :   $input =& $_SERVER;    break;
  48.         case 'globals' :   $input =& $GLOBALS;    break;
  49.         case 'data'    :   $input =& $datas;      break;
  50.         default:
  51.             return NULL;
  52.     }
  53.     if(''==$name) { // 获取全部变量
  54.         $data       =   $input;
  55.         $filters    =   isset($filter)?$filter:C('DEFAULT_FILTER');
  56.         if($filters) {
  57.             if(is_string($filters)){
  58.                 $filters    =   explode(',',$filters);
  59.             }
  60.             foreach($filters as $filter){
  61.                 $data   =   array_map_recursive($filter,$data); // 参数过滤
  62.             }
  63.         }
  64.     }elseif(isset($input[$name])) { // 取值操作
  65.         $data       =   $input[$name];
  66.         $filters    =   isset($filter)?$filter:C('DEFAULT_FILTER');
  67.         if($filters) {
  68.             if(is_string($filters)){
  69.                 $filters    =   explode(',',$filters);
  70.             }elseif(is_int($filters)){
  71.                 $filters    =   array($filters);
  72.             }
  73.             
  74.             foreach($filters as $filter){
  75.                 if(function_exists($filter)) {
  76.                     $data   =   is_array($data)?array_map_recursive($filter,$data):$filter($data); // 参数过滤
  77.                 }else{
  78.                     $data   =   filter_var($data,is_int($filter)?$filter:filter_id($filter));
  79.                     if(false === $data) {
  80.                         return   isset($default)?$default:NULL;
  81.                     }
  82.                 }
  83.             }
  84.         }
  85.     }else{ // 变量默认值
  86.         $data       =    isset($default)?$default:NULL;
  87.     }
  88.     is_array($data) && array_walk_recursive($data,'think_filter');
  89.     return $data;
  90. }
复制代码


回复

使用道具 举报

您需要登录后才可以回帖 登录 | ע

本版积分规则

QQ|Archiver|ֻ|С|ѡ̳

GMT+8, 2026-5-2 04:37 , Processed in 0.077367 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表
0.0906s