• ThinkPHP函数I代码优化


    ThinkPHP/Common/common.php 文件

    I函数,主要用来获取一些gpc请求的变量的,函数有一部分代码是过滤变量的,每次都运行一次,其实是没有必要的。

    如果你每次都像这样的方式调用的话:$a = I('post.a');$c = I('post.b');$c = I('post.c');过滤函数就会对$_POST数据进行3次重复的过滤,考虑到这个函数属于频繁调用的,可以优化一下。

    优化方案,增加一个静态变量,将第一次运行后的数据存储起来,后续调用直接取出来就可以了,代码如下:

    //by zxm 行是我修改的代码部分
    
    function I($name,$default='',$filter=null) {
        static $maps = array();//by zxm
        if(strpos($name,'.')) { // 指定参数来源
            list($method,$name) =   explode('.',$name,2);
        }else{ // 默认为自动判断
            $method =   'param';
        }
        if(!isset($maps[$method])){//by zxm
            switch(strtolower($method)) {
            case 'get'     :   $input =& $_GET;break;
            case 'post'    :   $input =& $_POST;break;
            case 'put'     :   parse_str(file_get_contents('php://input'), $input);break;
            case 'param'   :  
                switch($_SERVER['REQUEST_METHOD']) {
                case 'POST':
                    $input  =  $_POST;
                    break;
                case 'PUT':
                    parse_str(file_get_contents('php://input'), $input);
                    break;
                default:
                    $input  =  $_GET;
                }
                if(C('VAR_URL_PARAMS') && isset($_GET[C('VAR_URL_PARAMS')])){
                    $input  =   array_merge($input,$_GET[C('VAR_URL_PARAMS')]);
                }
                break;
                case 'request' :   $input =& $_REQUEST;   break;
                case 'session' :   $input =& $_SESSION;   break;
                case 'cookie'  :   $input =& $_COOKIE;    break;
                case 'server'  :   $input =& $_SERVER;    break;
                case 'globals' :   $input =& $GLOBALS;    break;
                default:
                    return NULL;
            }
            // 全局过滤
            // array_walk_recursive($input,'filter_exp');
    
            if(C('VAR_FILTERS')) {
                $_filters    =   explode(',',C('VAR_FILTERS'));
                foreach($_filters as $_filter){
                    // 全局参数过滤
                    array_walk_recursive($input,$_filter);
                }
            }
            $maps[$method] = $input;//by zxm
        }else{
            $input = $maps[$method];//by zxm
        }
    
    
    
        if(empty($name)) { // 获取全部变量
            $data       =   $input; 
            $filters    =   isset($filter)?$filter:C('DEFAULT_FILTER');
            if($filters) {
                $filters    =   explode(',',$filters);
                foreach($filters as $filter){
                    $data   =   array_map($filter,$data); // 参数过滤
                }
            }        
        }elseif(isset($input[$name])) { // 取值操作
            $data       =	$input[$name];
            $filters    =   isset($filter)?$filter:C('DEFAULT_FILTER');
            if($filters) {
                $filters    =   explode(',',$filters);
                foreach($filters as $filter){
                    if(function_exists($filter)) {
                        $data   =   is_array($data)?array_map($filter,$data):$filter($data); // 参数过滤
                    }else{
                        $data   =   filter_var($data,is_int($filter)?$filter:filter_id($filter));
                        if(false === $data) {
                            return	 isset($default)?$default:NULL;
                        }
                    }
                }
            }
        }else{ // 变量默认值
            $data       =	 isset($default)?$default:NULL;
        }
        return $data;
    }
    

      

  • 相关阅读:
    目标跟踪_POI算法
    深度学习-Maxpool
    HOG特征
    R CNN
    颜色空间
    数值分析-非线性方程的数值解法
    数值分析-一些小小的知识点
    数值分析-求微分
    多元统计分析-因子分析
    最优化-可行方向法
  • 原文地址:https://www.cnblogs.com/wuhen781/p/4355857.html
Copyright © 2020-2023  润新知