ZetCode

PHP 全局关键字

最后修改于 2025 年 4 月 16 日

PHP 的 global 关键字用于从函数内部访问全局变量。默认情况下,函数内部的变量具有局部作用域。global 关键字将全局变量导入局部作用域。

基本定义

全局变量在任何函数之外声明,并且可以在脚本中的任何地方访问。但是,在函数内部,变量默认具有局部作用域。

global 关键字允许在函数内访问全局变量。它在局部作用域中创建对全局变量的引用。可以使用逗号分隔多个变量来使它们成为全局变量。

语法:global $var1, $var2;。global 关键字必须在函数内部使用,在引用变量之前。它不会创建新变量,而是引用现有变量。

基本全局变量的用法

此示例演示了在函数内部使用 global 关键字的基本用法。

basic_global.php
<?php

declare(strict_types=1);

$counter = 0;

function incrementCounter() {
    global $counter;
    $counter++;
}

incrementCounter();
echo $counter; // Outputs 1

$counter 变量在全局作用域中声明。在函数内部,我们使用 global 关键字来访问它。如果没有 global,函数将创建一个局部变量。该函数直接修改全局变量。

访问多个全局变量

此示例显示了如何在函数中访问多个全局变量。

multiple_globals.php
<?php

declare(strict_types=1);

$name = "John";
$age = 30;

function displayInfo() {
    global $name, $age;
    echo "Name: $name, Age: $age";
}

displayInfo(); // Outputs Name: John, Age: 30

两个全局变量在函数外部声明。在函数内部,两者都使用 global 关键字使其可访问。然后,该函数可以使用这些变量,就像它们是局部变量一样。多个变量在 global 语句中用逗号分隔。

全局变量与局部变量

此示例演示了全局变量和局部变量之间的区别。

global_vs_local.php
<?php

declare(strict_types=1);

$var = "global";

function testScope() {
    $var = "local";
    echo "Inside function: $var\n";
}

testScope(); // Outputs Inside function: local
echo "Outside function: $var"; // Outputs Outside function: global

该示例表明,如果没有 global 关键字,函数会创建自己的局部变量。全局 $var 保持不变。局部变量在函数内部隐藏了全局变量。这演示了 PHP 的变量作用域规则。

修改全局数组

此示例显示了如何在函数中修改全局数组变量。

global_array.php
<?php

declare(strict_types=1);

$colors = ["red", "green", "blue"];

function addColor($newColor) {
    global $colors;
    $colors[] = $newColor;
}

addColor("yellow");
print_r($colors);

全局 $colors 数组在函数内部被修改。global 关键字允许直接访问和修改数组。新元素被添加到原始数组中,而不是局部副本中。这适用于所有数组操作。

嵌套函数中的全局变量

此示例演示了在嵌套函数调用中使用全局变量。

nested_global.php
<?php

declare(strict_types=1);

$value = 10;

function outer() {
    global $value;
    $value += 5;
    
    function inner() {
        global $value;
        $value *= 2;
    }
    
    inner();
}

outer();
echo $value; // Outputs 30

全局变量在外部和内部函数中都被访问。每个函数都修改相同的全局变量。更改在函数调用之间保持不变。这显示了全局变量如何在整个脚本执行过程中保持其状态。

全局变量与 $GLOBALS

此示例比较了使用 global 关键字和 $GLOBALS 超全局变量。

global_vs_globals.php
<?php

declare(strict_types=1);

$count = 0;

function incrementWithGlobal() {
    global $count;
    $count++;
}

function incrementWithGlobals() {
    $GLOBALS['count']++;
}

incrementWithGlobal();
incrementWithGlobals();
echo $count; // Outputs 2

两种方法都实现了相同的结果,但工作方式不同。global 关键字将变量导入局部作用域。$GLOBALS 是一个超全局数组,它始终包含所有全局变量。这两种方法都会修改原始全局变量。

使用全局变量的最佳实践

此示例显示了比直接使用全局变量更好的方法。

global_best_practice.php
<?php

declare(strict_types=1);

$config = [
    'debug' => true,
    'log_level' => 'warning'
];

function getConfig($key) {
    global $config;
    return $config[$key] ?? null;
}

function setConfig($key, $value) {
    global $config;
    $config[$key] = $value;
}

setConfig('log_level', 'error');
echo getConfig('log_level'); // Outputs error

与其直接访问全局变量,不如使用访问器函数。这提供了更好的控制和封装。函数充当全局数据的接口。这种模式比直接在整个代码中访问全局变量更易于维护。

最佳实践

来源

PHP 变量作用域文档

本教程通过实际示例介绍了 PHP 的 global 关键字,展示了如何在函数中访问和修改全局变量。

作者

我叫 Jan Bodnar,是一位充满激情的程序员,拥有丰富的编程经验。自 2007 年以来,我一直在撰写编程文章。到目前为止,我撰写了超过 1,400 篇文章和 8 本电子书。我拥有超过十年的编程教学经验。

列出 所有 PHP 教程