PHP $GLOBALS 怎么用?全局变量数组在 PHP 中有什么作用?

文章导读
Previous Quiz Next $GLOBALS 是 PHP 中的一种 "超全局" 或 "自动全局" 变量。它在整个脚本的所有作用域中都可用。在函数或方法中访问它时,无需执行 "global $variable;"。
📋 目录
  1. 使用 $GLOBALS 访问全局变量
  2. 使用 $GLOBALS 比较全局变量与局部变量
  3. 修改全局变量
  4. 只读 $GLOBALS
  5. 在函数内部更新全局变量
  6. 在嵌套函数中使用 $GLOBALS
  7. 将数组存储在全局变量中
A A

PHP - $GLOBALS



Previous
Quiz
Next

$GLOBALS 是 PHP 中的一种 "超全局" 或 "自动全局" 变量。它在整个脚本的所有作用域中都可用。在函数或方法中访问它时,无需执行 "global $variable;"。

$GLOBALS 是一个包含所有全局定义变量引用的关联数组。变量名构成键,它们的值是关联数组的值。

使用 $GLOBALS 访问全局变量

此示例展示了 $GLOBALS 数组包含全局变量的名称和内容 —

<?php
   $var1="Hello";
   $var2=100;
   $var3=array(1,2,3);

   echo $GLOBALS["var1"] . "\n";
   echo $GLOBALS["var2"] . "\n";
   echo implode($GLOBALS["var3"]) . "\n";
?>

输出

它将产生以下结果 —

Hello
100
123

使用 $GLOBALS 比较全局变量与局部变量

在以下示例中,$var1 在全局命名空间中定义,同时也在函数内部作为局部变量定义。从 $GLOBALS 数组中提取全局变量。

<?php
   function myfunction() {
      $var1="Hello PHP";
      echo "var1 in global namespace: " . $GLOBALS['var1']. "\n";
      echo "var1 as local variable: ". $var1;
   }
   $var1="Hello World";
   myfunction();
?>

输出

它将产生以下结果 —

var1 in global namespace: Hello World
var1 as local variable: Hello PHP

修改全局变量

在 PHP 8.1.0 版本之前,可以通过 $GLOBALS 数组的副本来修改全局变量。

<?php
   $a = 1;
   $globals = $GLOBALS; 
   $globals['a'] = 2;
   var_dump($a);
?>

输出

它将产生以下输出 —

int(1)

这里,$globals 是 $GLOBALS 超全局变量的副本。将副本中键为 "a" 的元素改为 2,实际上会改变 $a 的值。

它将产生以下输出 —

int(2)

只读 $GLOBALS

从 PHP 8.1.0 开始,$GLOBALS 是全局符号表的只读副本。也就是说,无法通过其副本来修改全局变量。上述相同操作不会将 $a 改为 2。

<?php
   $a = 1;
   $globals = $GLOBALS; 
   $globals['a'] = 2;
   var_dump($a);
?>

输出

它将生成以下输出 —

int(1)

在函数内部更新全局变量

在以下示例中,全局变量 $counter 将通过 $GLOBALS 在函数中直接更新。每次函数调用都会将值递增 1。

<?php
   $counter = 0;

   function incrementCounter() {
      $GLOBALS['counter']++;
   }

   incrementCounter();
   incrementCounter();
   incrementCounter();

   echo "Counter value: " . $counter;
?> 

输出

以上代码的输出如下 —

Counter value: 3

在嵌套函数中使用 $GLOBALS

在以下示例中,我们在嵌套函数内部使用 $GLOBALS。因此,通过此示例,你甚至可以在嵌套函数中使用全局变量。

<?php
   $var = "Hello";

   function outerFunction() {
      function innerFunction() {
         echo $GLOBALS['var'] . " from inner function!";
      }
      innerFunction();
   }

   outerFunction();
?> 

输出

以上代码的输出如下 —

Hello from inner function!

将数组存储在全局变量中

在以下示例中,$GLOBALS 允许你直接更改存储为全局变量的数组。我们示例中的函数向数组添加新项。

<?php
   $var = array("Apple", "Banana");

   function addFruit($fruit) {
      $GLOBALS['var'][] = $fruit;
   }

   addFruit("Orange");
   addFruit("Grapes");

   print_r($var);
?> 

输出

以上代码的输出如下 —

Array
(
   [0] => Apple
   [1] => Banana
   [2] => Orange
   [3] => Grapes
)