PHP语法基础篇(八):超全局变量

超全局变量是在 PHP 4.1.0 中引入的,并且是内置变量,可以在所有作用域中始终可用。
PHP 中的许多预定义变量都是"超全局的",这意味着它们在一个脚本的全部作用域中都可用。在函数或方法中无需执行 global $variable; 就可以访问它们。
PHP 超全局变量包括:

  • $GLOBALS
  • $_SERVER
  • $_REQUEST
  • $_POST
  • $_GET
  • $_FILES
  • $_ENV
  • $_COOKIE
  • $_SESSION
    本篇文章将记录一些超全局变量的学习过程,其余部分将在后面的篇章中说明。

一、$GLOBALS

$GLOBALS 是一个包含所有全局变量的数组,数组的键就是变量的名字。

php 复制代码
function test() {
  $foo = "局部变量";

  echo '$foo在全局作用域中的值:' . $GLOBALS["foo"] . "<br>";
  echo '$foo在当前作用域中的值:' . $foo . "<br>";
}

$foo = "全局变量";
test();

输出

php 复制代码
$foo在全局作用域中的值:全局变量
$foo在当前作用域中的值:局部变量

二、$_SERVER

$_SERVER 是一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等信息的数组。这个数组中的条目由 Web 服务器创建,所以不能保证每个 Web 服务器都提供全部条目;服务器可能会忽略一些,或者提供此处没有列举出来的其它内容。

下表列出了 $_SERVER 中重要的元素:

|-----------------------------------|-----------------------------------------------|
| 元素/代码 | 描述 |
| _SERVER\['PHP_SELF'\] | 返回当前执行脚本的文件名。 | | _SERVER['GATEWAY_INTERFACE'] | 返回服务器使用的 Common Gateway Interface (CGI) 的版本。 |
| _SERVER\['SERVER_ADDR'\] | 返回主机服务器的 IP 地址。 | | _SERVER['SERVER_NAME'] | 返回主机服务器的名称(如 www.w3school.com.cn)。 |
| _SERVER\['SERVER_SOFTWARE'\] | 返回服务器标识字符串(如 Apache/2.2.24)。 | | _SERVER['SERVER_PROTOCOL'] | 返回信息协议的名称和修订号(如 HTTP/1.1)。 |
| _SERVER\['REQUEST_METHOD'\] | 返回用于访问页面的请求方法(如 POST)。 | | _SERVER['REQUEST_TIME'] | 返回请求开始的时间戳(如 1377687496)。 |
| _SERVER\['QUERY_STRING'\] | 如果页面是通过查询字符串访问的,则返回查询字符串。 | | _SERVER['HTTP_ACCEPT'] | 返回当前请求的 Accept 头。 |
| _SERVER\['HTTP_ACCEPT_CHARSET'\] | 返回当前请求的 Accept_Charset 头(如 utf-8,ISO-8859-1)。 | | _SERVER['HTTP_HOST'] | 返回当前请求的 Host 头。 |
| _SERVER\['HTTP_REFERER'\] | 返回当前页面的完整 URL(不可靠,因为不是所有用户代理都支持它)。 | | _SERVER['HTTPS'] | 脚本是否通过安全的 HTTP 协议查询。 |
| _SERVER\['REMOTE_ADDR'\] | 返回用户查看当前页面的 IP 地址。 | | _SERVER['REMOTE_HOST'] | 返回用户查看当前页面的主机名。 |
| _SERVER\['REMOTE_PORT'\] | 返回用户在机器上用于与 Web 服务器通信的端口。 | | _SERVER['SCRIPT_FILENAME'] | 返回当前执行脚本的绝对路径名。 |
| _SERVER\['SERVER_ADMIN'\] | 返回在 Web 服务器配置文件中为 SERVER_ADMIN 指令给定的值。 | | _SERVER['SERVER_PORT'] | 返回服务器上 Web 服务器用于通信的端口(如 80)。 |
| _SERVER\['SERVER_SIGNATURE'\] | 返回添加到服务器生成页面的服务器版本和虚拟主机名。 | | _SERVER['PATH_TRANSLATED'] | 返回当前脚本基于文件系统的路径。 |
| _SERVER\['SCRIPT_NAME'\] | 返回当前脚本的路径。 | | _SERVER['SCRIPT_URI'] | 返回当前页面的 URI。 |

示例

php 复制代码
echo $_SERVER["SERVER_NAME"] . "<br>";
echo $_SERVER["HTTP_HOST"] . "<br>";
echo $_SERVER["SCRIPT_NAME"] . "<br>";

三、$_REQUEST

**_REQUEST** 是 PHP 的一个超全局变量,它包含了提交的表单数据和所有的 cookie 数据,默认情况下包含了 _GET,_POST 和 _COOKIE 的数组。也就是说,我们可以通过 $_REQUEST 关键字加上表单字段或 cookie 的名称来访问这些数据。

接下来我们创建一个 HTML 的表单,然后使用 $_REQUEST 来获取表单提交的数据,然后将获取到的表单数据显示在页面上。

php 复制代码
<html>
  <body>
    <form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
      名字:<input type="text" name="username" />
      <input type="submit" />
    </form>

    <?php
    if ($_SERVER["REQUEST_METHOD"] == "POST") {
      $name = htmlspecialchars($_REQUEST["username"]);
      if (!empty($name)) {
        echo "<h1>名字是:$name</h1>";
      }
    }
    ?>
  </body>
</html>

四、$_POST

当 HTTP POST 请求的 Content-Type 是 application/x-www-form-urlencoded(表单数据以键值对的形式编码并发送到服务器。它是 HTML 表单默认的编码方式。) 或 multipart/form-data(用于在 Web 表单中上传文件或提交包含二进制数据的表单。它允许在单个 HTTP 请求中发送多个不同类型的数据(如文本字段和文件)。) 时,会将变量以关联数组形式传入当前脚本。

php 复制代码
<html>
  <body>
    <form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
      名字:<input type="text" name="username" />
      <input type="submit" />
    </form>

    <?php
    if ($_SERVER["REQUEST_METHOD"] == "POST") {
      $name = htmlspecialchars($_POST["username"]);
      if (!empty($name)) {
        echo "<h1>名字是:$name</h1>";
      }
    }
    ?>
  </body>
</html>

五、$_GET

通过 URL 参数(又叫查询字符串)传递给当前脚本的变量的数组。注意:该数组不仅仅对表单 method 为 GET 的请求生效,而是会针对所有带 查询字符串 的请求。

html 复制代码
<a href="demo_get.php?name=Hello">测试 $_GET</a>

demo_get.php

php 复制代码
<?php
echo "<h1>" . $_GET["name"] . "</h1>";

六、其它超全局变量

其它的超全局变量在这里只做简单的说明,具体的使用会在后续的篇章中给出。

$_FILES --- HTTP 文件上传变量:通过 HTTP POST 方式上传到当前脚本的项目的数组。

_ENV --- 环境变量:通过环境方式传递给当前脚本的变量的数组。这些变量被从 PHP 解析器的运行环境导入到 PHP 的全局命名空间。很多是由支持 PHP 运行的 Shell 提供的,并且不同的系统很可能运行着不同种类的 Shell,所以 _ENV 数组中的内容是和当前运行环境相关的。

$_COOKIE --- HTTP Cookies:通过 HTTP Cookies 方式传递给当前脚本的变量的数组。

$_SESSION --- Session 变量:当前脚本可用 SESSION 变量的数组。

相关推荐
BingoGo2 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php
JaguarJack2 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php·服务端
BingoGo3 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php
JaguarJack3 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php·服务端
JaguarJack4 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
后端·php·服务端
BingoGo4 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
php
JaguarJack5 天前
告别 Laravel 缓慢的 Blade!Livewire Blaze 来了,为你的 Laravel 性能提速
后端·php·laravel
郑州光合科技余经理5 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
QQ5110082855 天前
python+springboot+django/flask的校园资料分享系统
spring boot·python·django·flask·node.js·php
WeiXin_DZbishe5 天前
基于django在线音乐数据采集的设计与实现-计算机毕设 附源码 22647
javascript·spring boot·mysql·django·node.js·php·html5