Practical PHP Programming

超全局变量

在PHP当中有几个特殊的数组被叫做超全局变量。它们之所以被称为“超全局变量”是因为不管它们在代码的什么地方,都能够访问到。这些变量在PHP 4.1之前是没有的,所以推荐你用新版本的PHP一遍能够使用超全局变量。超全局变量同PHP种其他的数组一样使用,也就是说也有遍历等方法。

下面是九个超全局变量的说明:

函数名 功能
$GLOBALS 包含代码中的所有全局变量,也包含其他超全局变量。通常不推荐使用,除非由于某种原因或你不知道变量保存在什么位置。$GLOBALS从PHP 3中就存在,功能一直保持不变。
$_GET 包含所有HTTP GET请求传递的变量,也就是URL传递的那些。
$_POST 包含所有HTTP POST请求传递的变量。
$_FILES 包含POST上传文件传递的变量。
$_COOKIE 包含所有cookies传递的变量。
$_REQUEST 包含所有HTTP GET/POST/cookie所传递的变量。相当于上述三者的结合,危险程度仅次于$GLOBALS。由于其包含来自不信任源(如访客)的变量,除非有好的理由,否则尽量不要使用。
$_SESSION 包含所有储存在用户session当中的变量。
$_SERVER 包含你所使用web服务器或与你代码执行直接相关的变量。
$_ENV 包含所有系统为你的代码配置的环境变量。

有两种超全局变量不鼓励用户使用,分别是$GLOBALS$_REQUEST。这两个数组都是其他数组的组合,并且混入了不受信任的用户数据。当你使用$_COOKIE['somevar']的时候,你知道这个变量来自于用户的计算机而不是通过编辑URL地址得来的。而当你使用$_REQUEST['somevar'],你就无法保证这一点了。