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 教程。