PHP - $GLOBALS 变量



$GLOBALS 是 PHP 的“超全局”或“自动全局”变量之一。它在整个脚本的所有范围内都可用。无需执行 “global $variable;”即可在函数或方法中访问它。

$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

在以下示例中,$var 1 在全局命名空间中定义,并在函数内部定义局部变量。全局变量是从 $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)

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


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

它将产生以下输出 -

int(1)