PHP 全局关键字
最后修改于 2025 年 4 月 16 日
PHP 的 global 关键字用于从函数内部访问全局变量。默认情况下,函数内部的变量具有局部作用域。global 关键字将全局变量导入局部作用域。
基本定义
全局变量在任何函数之外声明,并且可以在脚本中的任何地方访问。但是,在函数内部,变量默认具有局部作用域。
global 关键字允许在函数内访问全局变量。它在局部作用域中创建对全局变量的引用。可以使用逗号分隔多个变量来使它们成为全局变量。
语法:global $var1, $var2;。global 关键字必须在函数内部使用,在引用变量之前。它不会创建新变量,而是引用现有变量。
基本全局变量的用法
此示例演示了在函数内部使用 global 关键字的基本用法。
<?php
declare(strict_types=1);
$counter = 0;
function incrementCounter() {
global $counter;
$counter++;
}
incrementCounter();
echo $counter; // Outputs 1
$counter 变量在全局作用域中声明。在函数内部,我们使用 global 关键字来访问它。如果没有 global,函数将创建一个局部变量。该函数直接修改全局变量。
访问多个全局变量
此示例显示了如何在函数中访问多个全局变量。
<?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 语句中用逗号分隔。
全局变量与局部变量
此示例演示了全局变量和局部变量之间的区别。
<?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 的变量作用域规则。
修改全局数组
此示例显示了如何在函数中修改全局数组变量。
<?php
declare(strict_types=1);
$colors = ["red", "green", "blue"];
function addColor($newColor) {
global $colors;
$colors[] = $newColor;
}
addColor("yellow");
print_r($colors);
全局 $colors 数组在函数内部被修改。global 关键字允许直接访问和修改数组。新元素被添加到原始数组中,而不是局部副本中。这适用于所有数组操作。
嵌套函数中的全局变量
此示例演示了在嵌套函数调用中使用全局变量。
<?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 超全局变量。
<?php
declare(strict_types=1);
$count = 0;
function incrementWithGlobal() {
global $count;
$count++;
}
function incrementWithGlobals() {
$GLOBALS['count']++;
}
incrementWithGlobal();
incrementWithGlobals();
echo $count; // Outputs 2
两种方法都实现了相同的结果,但工作方式不同。global 关键字将变量导入局部作用域。$GLOBALS 是一个超全局数组,它始终包含所有全局变量。这两种方法都会修改原始全局变量。
使用全局变量的最佳实践
此示例显示了比直接使用全局变量更好的方法。
<?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 的 global 关键字,展示了如何在函数中访问和修改全局变量。
作者
列出 所有 PHP 教程。