f10@t's blog

PHP学习--超级全局变量

字数统计: 1.3k阅读时长: 5 min
2018/11/09

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
<?php
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
<?php
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
<!DOCTYPE html>
<html>
<head>Test $_GET</head>
<body>
<a href="$_GET.php?name=admin&passwd=123456">Test GET</a>
</body>
</html>
1
2
<?php
echo "Your login name is " . $_GET['name'] . " and your passwd is " . $_GET['passwd'];
  访问\(_GET.html并点击超链接就会发现我们提交的表单数据已经传到了另一个页面了。   ![](/img/PHP学习-超级全局变量/1.png)   ![](/img/PHP学习-超级全局变量/2.png)   在第二个界面中我们也可以看到URL为:`xxx/\)_GET.php?name=admin&passwd=123456` 通过改变参数也可以改变输出结果。

$_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
<!DOCTYPE html>
<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
<?php
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
<?php
$a = 1;
$b = 2;

function sum(){
$GLOBALS['a'] = $GLOBALS['b'] + $GLOBALS['a'];
}

sum();
echo $a; //输出结果为3

CATALOG
  1. 1. 预定义全局变量(或称为预定义数组)
    1. 1.1. $_SERVER(服务器变量)
    2. 1.2. $_ENV(环境变量)
    3. 1.3. $_GET(URL GET变量)
    4. 1.4. $_POST(HTTP POST变量)