(PHP 4, PHP 5, PHP 7, PHP 8)
$GLOBALS — Hace referencia a todas las variables disponibles en un contexto global
Un array asociativo que contiene referencias a todas las variables globales actualmente definidas en el contexto de ejecución global del script. Los nombres de las variables son los índices del array.
Ejemplo #1 Ejemplo con $GLOBALS
<?php
function test()
{
$foo = "variable local";
echo '$foo en el contexto global : ' . $GLOBALS["foo"] . "\n";
echo '$foo en el contexto actual : ' . $foo . "\n";
}
$foo = "Contenido de ejemplo";
test();
?>
El resultado del ejemplo sería algo similar a:
$foo en el contexto global : Contenido de ejemplo $foo en el contexto actual : variable local
A partir de PHP 8.1.0, el acceso en escritura al array entero $GLOBALS ya no es soportado:
Ejemplo #2 Escribir en el array entero $GLOBALS resultará en un error.
<?php
// Genera un error durante la compilación:
$GLOBALS = [];
$GLOBALS += [];
$GLOBALS =& $x;
$x =& $GLOBALS;
unset($GLOBALS);
array_pop($GLOBALS);
// ...y cualquier otra operación de escritura/lectura-escritura en $GLOBALS
?>
Nota:
Esta es una 'superglobal' o una variable automatic global. Significa simplemente que es una variable que está disponible en cualquier parte del script. No hace falta hacer global $variable; para acceder a la misma desde funciones o métodos.
Nota: Disponibilidad de las variables
A diferencia de todas las demás superglobales, $GLOBALS siempre ha estado disponible en PHP.
Nota:
A partir de PHP 8.1.0, $GLOBALS es ahora una copia de solo lectura del array de símbolos global. Es decir, las variables globales no pueden ser modificadas a través de su copia. Anteriormente, el array $GLOBALS estaba excluido del comportamiento habitual por valor de los arrays de PHP y las variables globales podían ser modificadas a través de su copia.
<?php
// Antes de PHP 8.1.0
$a = 1;
$globals = $GLOBALS; // Copia ostensiblemente por valor
$globals['a'] = 2;
var_dump($a); // int(2)
// A partir de PHP 8.1.0
// esto ya no modifica $a. El comportamiento anterior violaba la semántica por valor.
$globals = $GLOBALS;
$globals['a'] = 1;
// Para restaurar el comportamiento anterior, iterar su copia y asignar cada propiedad de vuelta a $GLOBALS.
foreach ($globals as $key => $value) {
$GLOBALS[$key] = $value;
}
?>