PHP 中的许多预定义变量都是“超全局的”,这意味着它们在一个脚本的全部作用域中都可用。在函数或方法中无需执行 global $variable; 就可以访问它们。
预定义全局变量(或称为预定义数组)
PHP中共有九大预定义的全局变量,可以在脚本的任何地方访问他们。分别是:
$_SERVER
, $_GET
, $_POST
,
$_COOKIE
, $_SESSION
, $_FILES
,
$_ENV
, $_REQUEST
, $_GLOBALS
。
这些预定义的全局变量有以下特点: 1.
实质就是特殊的数组,操作方式没有任何区别。 2.
无需声明,脚本中默认存在,所以应注意避免与这些全局变量重名。 3.
无需Global关键词就可以访问。
他们各自有着重要的作用,下面进行一一说明。
$_SERVER
(服务器变量)
$_SERVER
是一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script
locations)等等信息的数组。这个数组中的项目由Web服务器创建。服务器可能会忽略一些,或者提供一些没有在这里列举出来的项目。
如: 1
2
3
4
5
6
7
foreach ($_SERVER as $key => $value) { //遍历数组
echo '$_SERVER[' . $key . '] = ' . $value . '<br>';
}
echo '<pre>';
print_r($_SERVER); //因为它的本质也是数组,所以可以用print_r输出数组内容
echo '</pre>';
$_ENV
(环境变量)
$_ENV
数组内容是在PHP解释器运行时,从PHP所在的服务器中的环境变量转变为PHP变量的。他们中的大部分有PHP运行的系统决定。
1
2
3
4
foreach($_ENV as $key => $value){ //foreach遍历整个$_ENV数组
echo '$_ENV['.$key.'] = '.$value.'<br>'; //输出数组$_ENV的每一个元素的下标和值
}
$_GET
(URL GET变量)
$_GET
是经由URL请求提交到脚本的变量,它被广泛应用于收集表单数据,需要在HTML
form标签的指定该属性:"method="get"。比如我们现在写两个页面。一个为$_GET.html
,另一个为$_GET.php
。
1
2
3
4
5
6
7
<html>
<head>Test $_GET</head>
<body>
<a href="$_GET.php?name=admin&passwd=123456">Test GET</a>
</body>
</html>1
2
echo "Your login name is " . $_GET['name'] . " and your passwd is " . $_GET['passwd'];
$_POST
(HTTP POST变量)
$_POST
也用于收集表单数据,使用时需要添加标签属性:method=post
。表单域的名称会自动成为$_POST
数组中的
ID 键。我们使用两个页面:$_POST.html
和
$_POST.php
1
2
3
4
5
6
7
8
9
10
11
12
13
<html>
<body>
<form action="$_POST.php" method="post">
Your name:
<input type="text" name="NAME" ><br>
Your age:
<input type="text" name="AGE" ><br>
<input type="submit" value="提交"/>
</form>
</body>
</html>1
2
echo "your name is " . $_POST['NAME'] . " and your age is ". $_POST['AGE'];$_REQUEST
(request变量)
此关联数组包含了$_GET
,$_POST
和$_COOKIE
中的全部内容。假设我们设置了一个输入域名称为"adress",那么如果用POST方法提交的话,$_REQUEST["address"]
就是我们的提交值;如果用GET方法提交的话,$_REQUEST["address"]
的值就是提交值了。只不过\(_REQUEST的速度较慢,不推荐使用。 ####
`\)_FILES(HTTP文件上传变量) 使用表单的file输入域上传文件是。必须使用POST来提交。但在服务器文件中,并不能通过
\(_POST`数组来获取提交表单中的file域中的内容。而`\)_FILES是表单通过POST方法传递的已上传项目组成的数组。该数组是一个二维数组,含有五个子数组元素,第一个下标为表单中输入域的名称,第二个用于描述上传文件的属性。后面会仔细学习该变量,这里先介绍。 ####
\(_COOKIE`(HTTP Cookies)
通常这些cookies是由以前执行的php脚本通过setCookie()方法设置到客户端浏览器中的。具体后面介绍
####
`\)_SESSION(Session变量) PHP5中,会话控制是在服务器端使用session跟踪用户。当服务器页面中使用session_start()函数开启session后,就可以使用
\(_session`数组注册全局变量,用户就可以在整个网站中访问这些绘画信息。具体后面介绍。
####
`\)GLOBALS(Global变量)
$_GLOBALS变量是由所有已定义的全局变量和数组组成的。变量名就是数组的索引,所有脚本中均有效。我们也可以使用它来代替
global`关键字,如:
1
2
3
4
5
6
7
8
9
10
$a = 1;
$b = 2;
function sum(){
$GLOBALS['a'] = $GLOBALS['b'] + $GLOBALS['a'];
}
sum();
echo $a; //输出结果为3