PHP 用户定义的全局变量

示例

任何函数或类之外的范围都是全局范围。当PHP脚本包含另一个脚本(使用include或require)时,范围保持不变。如果脚本包含在任何函数或类的外部,则其全局变量包含在同一全局范围内,但是如果脚本包含在函数内部,则所包含脚本中的变量位于函数的范围内。

在函数或类方法的范围内,global关键字可以用于创建访问用户定义的全局变量。

<?php

$amount_of_log_calls = 0;

function log_message($message) {
    // 从函数范围访问全局变量
    // 需要这个明确的陈述
    global $amount_of_log_calls;

    // 对全局变量的更改是永久的
    $amount_of_log_calls += 1;

    echo $message;
}

// 在全局范围内时,可以使用常规全局变量
// 没有明确说明“全局$variable”;
echo $amount_of_log_calls; // 0

log_message("第一条日志消息!");
echo $amount_of_log_calls; // 1

log_message("第二条日志消息!");
echo $amount_of_log_calls; // 2

从全局范围访问变量的第二种方法是使用特殊的PHP定义的$GLOBALS数组。

$GLOBALS数组是一个关联数组,其全局变量的名称为键,该变量的内容为该数组元素的值。注意$GLOBALS在任何范围内如何存在,这是因为$GLOBALS是一个超全局变量。

这意味着该log_message()函数可以重写为:

function log_message($message) {
    // 通过访问全局$amount_of_log_calls变量
    //$GLOBALS数组。不需要'global $GLOBALS;',因为它
    // 是一个超全局变量。
    $GLOBALS['amount_of_log_calls'] += 1;

    echo $messsage;
}

有人会问,为什么同时使用global关键字$GLOBALS来获取全局变量的值呢?主要原因是使用global关键字会将变量带入范围。然后,您将无法在本地范围内重用相同的变量名。