Discuz代码分析:getgpc($k, $t='GP')获取超全局数组值

分析 Discuz x3.1。

函数源码

function getgpc($k, $t='GP') {
    $t = strtoupper($t);
    switch($t) {
        case 'GP' : isset($_POST[$k]) ? $var = &$_POST : $var = &$_GET; break;
        case 'G': $var = &$_GET; break;
        case 'P': $var = &$_POST; break;
        case 'C': $var = &$_COOKIE; break;
        case 'R': $var = &$_REQUEST; break;
    }
    return isset($var[$k]) ? $var[$k] : null;
}

函数分析

函数名:

getgpc( )

参数:

$k: 超全局数组键;
$t: 超全局数组。

函数位置:

/install/include/install_function.php

作用

通过 $t 参数 获取预定义超全局数组 $_GET、$_POST、$_COOKIE 和 $_REQUEST 所对应的键为$k的值。

优点好处

相比于普通的通过 $_POST[$k] 来获取键 $k 所对应的值,单独声明这样一个getgpc函数使得处理更简单。统一使用一个函数来处理这四个超全局数组,增加了代码可读性,减少了出错概率。

代码分析:

1. 把参数$t 转化为大写:

$t = strtoupper($t);

这样做的好处是,如果用户在调用这个函数时,写一个小写的也可以转化为大写,不至于引起错误。

2. 通过switch来处理参数$t对应的全局数组:

switch($t) {
        case 'GP' : isset($_POST[$k]) ? $var = &$_POST : $var = &$_GET; break;
        case 'G': $var = &$_GET; break;
        case 'P': $var = &$_POST; break;
        case 'C': $var = &$_COOKIE; break;
        case 'R': $var = &$_REQUEST; break;
    }
  • a) 如果在调用函数时,使用的是默认值’GP’,则判断值$_POST[$k]是不是已经设置,若设置了,则取$_POST的地址给变量$var,否则,把$_GET的地址赋给$var。
  • b) 下面四个处理方式,跟上面类似,唯一不同是下面四个是单独处理$t的值,当$t = ‘G’时,把$_GET的地址赋给$var,其它几个处理方式跟这个完全一样。

疑问:
可能有人会问,为什么非要使用默认的$t=’GP’,如果改为$t=’G’或其它的,那么,不是代码更少一行了吗?其实,这样写的目的完全是为了方便,如果我们把函数第二个参数改为$t=’G’,当用户在调用这个函数时,若使用的是post提交过来的数组,那么,第二个参数就必须写上小写’p’或大写’P’了,即getgpc($k,’p’),但是,使用$t=’GP’默认参数的话,完全不用写第二个参数,即getgpc($k)这样就可以了,这样就省事了。

3. 返回键$k对应的值$var[$k]

若这个值没有设置,那么,返回null,代码如下:

return isset($var[$k]) ? $var[$k] : null;

总结:

在我们通过php程序开发网站后台时,经常会用到类似的方法来处理一下几个常用的超全局数组,从这里我们也可以看出面向对象的封装性,给我们后面写代码时带来很多方便。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值