PHP超全局变量

本文详细介绍了PHP中超全局变量的概念及其应用,包括$GLOBALS、$_SERVER、$_GET、$_POST等,阐述了它们如何在PHP环境中任何作用域下都能生效,并提供了示例代码帮助理解。

1.超全局变量的由来

    因为在PHP的运行当中,经常需要一些变量去存储运行环境的一些参数,以及设置,这些变量称为预定义变量。

    而从 PHP 4.1.0 开始,PHP 提供了一套附加的预定数组,这些数组变量包含了来自 web 服务器(如果可用),运行环境,和用户输入的数据。这些数组非常特别,它们在全局范围内自动生效,例如,在任何范围内自动生效。因此通常被称为自动全局变量(autoglobals)或者超全局变量(superglobals)。

   

2.超全局数组

    定义:其实超全局变量就是在PHP环境中的任何范围都有效的预定义变量。

    这些超全局变量分别是:

  • $GLOBALS :该变量的作用是把局部变量注册成全局变量。(被注册的变量名称就是该数组的键名),以下面代码为例,我们可以理解为$GLOBALS["foo"]是变量$foo的一个"全局引用"。
<?php
function  test () {
     $foo  =  "local variable" ;

    echo  '$foo in global scope: '  .  $GLOBALS [ "foo" ] .  "\n" ;
    echo  '$foo in current scope: '  .  $foo  .  "\n" ;
}

$foo  =  "Example content" ;
test ();

//最终会输出
//$foo in global scope: Example content
//$foo in current scope: local variable
?>

     

  • $_SERVER:$_SERVER 是一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组。这个数组中的项目由 Web 服务器创建。不能保证每个服务器都提供全部项目;服务器可能会忽略一些,或者提供一些没有在这里列举出来的项目。
    <?php 
        //输出当前浏览器的一些信息
        echo  $_SERVER [ 'HTTP_USER_AGENT' ]; 
    ?>

     

  • $_GET:获取由HTTP GET方法提交的参数
  • $_POST:获取由HTTP POST方法提交的参数
  • $_FILES:获取由由HTTP POST方法提交上传的文件参数
  • $_COOKIE:获取cookie数据
  • $_SESSION:获取session数据
  • $_REQUEST: 默认情况下包含了 $_GET,$_POST 和 $_COOKIE 的数组
  • $_ENV:存储着环境变量的数组

 

3.其他一些预定义变量

    $argc — 传递给脚本的参数数目:

//script.php
<?php
    var_dump ( $argc );
?>

//当使用这个php命令执行上面的脚本: php script.php arg1 arg2 arg3时 ,上面这个
//脚本就会输出4,(script.php也是一个参数)

  $argv — 获取传递给脚本的参数数组(也就是获取脚本输入的参数值)

 

    

<think>首先,用户的问题是:“我想了解PHP超全局变量的相关信息 请问PHP超全局变量介绍”。这直接要求介绍PHP超全局变量。 从系统指令中,我需要: - 所有行内数学表达式使用$...$格式(但PHP主题不太可能有数学,所以可能不需要)。 - 独立公式用$$...$$(同样,不太相关)。 - LaTeX语法正确(但PHP代码不是LaTeX,所以正常处理代码)。 - 使用中文回答。 - 生成相关问题(在末尾)。 - 回答中引用的段落末尾自然地添加引用标识。 引用资料提供了几个来源: - [^1]: 介绍超级全局变量的一般信息和注意事项。 - [^2]: 显示使用$GLOBALS的例子。 - [^3]: 列出超全局变量列表和另一个例子。 - [^4]: 类似于[^2],展示$GLOBALS例子。 - [^5]: 详细$_SERVER的参数和使用。 用户的信息是基于这些引用的,所以我需要基于这些内容构建回答。 关键点是PHP超全局变量的介绍: - 定义:超级全局变量是PHP内置的变量,在整个脚本中自动可用,无需global声明。 - 常见的超全局变量:如$GLOBALS、$_SERVER、$_GET、$_POST等。 - 特点:在脚本的任何地方都可访问。 - 安全性注意事项:由于容易访问,需要注意安全问题。 - 例子:如使用$GLOBALS修改全局变量。 结构化回答: 1. **简介**:解释什么是超全局变量,基于引用。 2. **常见超全局变量列表**:简要列出它们,参考[^3]和[^5]。 3. **特点和使用**:讨论作用域、无需global关键字。 4. **安全性考虑**:提及[^1]中提到的安全性、性能和作用域问题。 5. **示例**:提供一个或多个代码示例,如从引用中提取。 6. **引用标识**:在相关段落末尾添加[^n]。 7. **生成相关问题**:在末尾添加§§相关问题§§部分。 使用中文回答。 代码示例:我需要确保代码块正确格式化,使用```language```格式,如示例中所示。 生成相关问题: - 基于主题,如:如何安全使用超全局变量?常见用途?与其他变量的区别?优化技巧? 最终回答结构: - 开头:介绍超全局变量。 - 主体:列出变量,解释特点,给出例子。 - 结尾:总结并添加相关问题。 </think>### PHP超全局变量介绍 超全局变量PHP语言中一组内置的预定义变量,它们在脚本的**整个作用域中自动可用**,无需使用`global`关键字声明。这些变量主要用于简化HTTP请求处理、表单数据提交、会话管理等功能,使开发者能高效地在不同页面间共享数据。然而,在使用时需注意**安全性问题**(如SQL注入或XSS攻击风险),避免直接处理未过滤的用户输入,以提升程序的可维护性和安全性。[^1] #### 1. 常见超全局变量列表 PHP提供多个超全局变量,每个变量存储特定类型的数据。以下是主要超全局变量及其简要描述: - **$GLOBALS**:引用全局作用域中的所有变量,允许在函数内部直接访问或修改全局变量。[^3] - **$_SERVER**:存储服务器和执行环境信息,例如客户端IP地址、请求方法等。[^5] - **$_GET**:包含通过URL查询字符串(GET方法)提交的数据。[^5] - **$_POST**:存储通过HTTP POST请求提交的表单数据。[^3] - **$_FILES**:处理文件上传信息。[^3] - **$_COOKIE**:访问HTTP Cookies数据。[^3] - **$_SESSION**:管理和存储会话变量。[^3] - **$_REQUEST**:合并了GET、POST和COOKIE数据,但安全性较低,不建议优先使用。[^3] - **$_ENV**:访问环境变量。[^3] 这些变量在脚本任何位置(如函数或类内部)都可用,无需额外声明,极大简化了数据传递。[^3] #### 2. 核心特点 - **作用域全局性**:与普通局部变量或全局变量不同,超全局变量在脚本执行期间始终可访问。例如,在函数内可直接读全局变量,而无需通过`global`关键字。[^3] - **数据类型**:通常存储为关联数组(如`$_SERVER['KEY']`),便于键值对操作。 - **性能考虑**:频繁访问超全局变量可能影响性能,建议在必要时缓存其值。[^1] #### 3. 使用示例 以下代码演示如何使用超全局变量,例如`$GLOBALS`和`$_SERVER`: ```php <?php // 使用 $GLOBALS 修改全局变量 $x = 75; $y = 25; function addition() { $GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y']; // 直接访问全局变量 } addition(); echo $z; // 输出 100 ?> <?php // 使用 $_SERVER 获取请求信息 echo "服务器主机名: " . $_SERVER['SERVER_NAME'] . "\n"; // 例如输出当前主机名 echo "请求方法: " . $_SERVER['REQUEST_METHOD'] . "\n"; // 输出 GET、POST 等 echo "用户IP: " . $_SERVER['REMOTE_ADDR'] . "\n"; // 输出客户端IP地址 ?> ``` 在第一个例子中,`$GLOBALS`允许函数直接更新全局变量`$z`;在第二个例子中,`$_SERVER`提供服务器环境信息。[^4][^5] 注意:实际使用时,需对用户输入(如`$_GET['param']`)进行过滤和验证,以防止安全漏洞。[^1] #### 4. 最佳实践 - **安全性**:始终使用函数如`htmlspecialchars()`或`filter_input()`处理用户输入(例如来自`$_GET`或`$_POST`的数据)。 - **适用范围**:适用于表单处理、会话管理和API开发,但避免在大型应用中滥用,以免代码耦合度高。 - **性能优化**:减少对超全局变量的重复访问,将其值赋值给局部变量使用。[^1] 通过合理使用超全局变量PHP开发者可以实现高效的数据共享和请求处理,同时确保程序的健壮性。[^1]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值