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

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

  1. 管理Discuz!代码分析的收集整理

    管理Discuz!代码分析的收集整理 1.后台结构 @�L^SD+k#G0 后台首页提供了常用操作:用户(组)编辑,论坛基本备份等. k XS7]+mB8H0 2.PHPChina 开源社区门户&qu ...

  2. Discuz代码分析——index.php

    /*     [Discuz!] (C)2001-2007 Comsenz Inc.     This is NOT a freeware, use is subject to license ter ...

  3. php监听input,jQuery如何实时监听获取input输入框的值

    jQuery实时监听获取input输入框的值,在我们日常web项目开发也常需要去实现这样的功能效果.为了作出即时动作去引导浏览者,以便提高网站的用户体验感. 下面我们就结合具体的代码示例,为大家介绍j ...

  4. 【MATLAB】数据类型 ( 元胞数组 | 单位阵 | 幻方 | 结构体 | 元胞数组值获取 )

    文章目录 一.元胞数组 1.定义元胞数组 2.生成单位阵 3.生成幻方 4.元胞数组元素赋值 5.元胞数组元素赋值 二 二.元胞数组 1.定义结构体 2.小括号获取元胞数组子数组 3.大括号获取元胞数 ...

  5. 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 获取注入的 libbridge.so 动态库中的 load 函数地址 并 通过 远程调用 执行该函数 )

    文章目录 一.dlsym 函数简介 二.获取 目标进程 linker 中的 dlsym 函数地址 三.远程调用 目标进程 linker 中的 dlsym 函数 获取 注入的 libbridge.so ...

  6. 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 获取 linker 中的 dlopen 函数地址 并 通过 远程调用 执行该函数 )

    文章目录 一.dlopen 函数简介 二.获取 目标进程 linker 中的 dlopen 函数地址 三.远程调用 目标进程 linker 中的 dlopen 函数 一.dlopen 函数简介 dlo ...

  7. 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 远程调用 目标进程中 libc.so 动态库中的 mmap 函数 三 | 等待远程函数执行完毕 | 寄存器获取返回值 )

    文章目录 前言 一.等待远程进程 mmap 函数执行完毕 二.从寄存器中获取进程返回值 三.博客资源 前言 前置博客 : [Android 逆向]Android 进程注入工具开发 ( 注入代码分析 | ...

  8. PL读写DDR3 实现PS和PL间的数据交互 代码分析

    本文是PL读写DDR3 实现PS和PL间的数据交互 的继续,深入分析其代码. 首先分析基本要求,或者需求分析,然后读写流程描述,实测采集的读写过程的波形图,最后分段代码分析,这个代码是上文中利用viv ...

  9. 20145236《网络攻防》Exp4 恶意代码分析

    20145236<网络攻防>Exp4 恶意代码分析 一.基础问题回答 如果在工作中怀疑一台主机上有恶意代码,但只是猜想,所有想监控下系统一天天的到底在干些什么.请设计下你想监控的操作有哪些 ...

  10. Device Tree(三):代码分析

    2019独角兽企业重金招聘Python工程师标准>>> 一.前言 Device Tree总共有三篇,分别是: 1.为何要引入Device Tree,这个机制是用来解决什么问题的?(请 ...

最新文章

  1. HALCON完全卸载重装
  2. UNICODE与多字节字符集等字符问题
  3. d.php xfso_centos平台基于snort、barnyard2以及base的IDS(入侵检测系统)的搭建与测试及所遇问题汇总...
  4. centos 6.9 安装 Mysql 5.7.20 安装
  5. 如何优化myeclipse.
  6. Python Pandas库教程
  7. IEEE2020-IJON: Exploring Deep State Spaces via Fuzzing
  8. java 两点间距离_Java实现控制台输出两点间距离
  9. 火狐控制台的html,怎么使用火狐浏览器调试网页
  10. 修改迅雷下载中“边下边播”的默认播放器
  11. 【UTR #1】ydc的大树
  12. 利用Linux自带的logrotate管理日志
  13. 2020年全球半导体清洗设备发展现状、竞争格局及中国企业发展进展分析,行业集中度较高,国产化进程达到20%「图」
  14. se 2.4 path 小记。
  15. 2021年中国奶酪行业发展现状及进出口状况分析:奶酪进口规模庞大,国产奶酪仍需发力 [图]
  16. 物联网课程论文:《基于云原生的物联网端管云系统方案综述与演进设想》
  17. html表格td向下排序,jquery实现的table排序功能示例
  18. 01-HTML+CSS+JS【常用总结+案例练习】
  19. 【问题解答】java中的私有部分能被外界访问吗?
  20. Linux终端设计来干啥,linux系统终端 是干什么的?

热门文章

  1. ZZULIOJ1026-1030Python解法
  2. 微信无法打开xlsx文件_电脑微信excel打不开怎么办
  3. NODDI在临床研究中的应用
  4. 求助微软商店下载的Ubuntu打开后显示目标路径参数错误,进入路径强制打开显示0x80070005错误。各种方法都试验了
  5. 专题:手把手学习硬件基础之手册阅读------LDOAMS117
  6. SPSS基础教程:统计分析前的准备
  7. 土地利用转移矩阵图怎么做_土地利用转移矩阵的几种实现方法
  8. 土地利用转移矩阵图怎么做_如何用Arcgis做土地利用转移矩阵?求教各位..._土地估价师_帮考网...
  9. Arcgis重分类无法赋新值为小数
  10. 431. 将 N 叉树编码为二叉树(树+二叉树 相互转化)