$GLOBALS

(PHP 4, PHP 5, PHP 7, PHP 8)

$GLOBALSHace referencia a todas las variables disponibles en un contexto global

Descripción

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.

Ejemplos

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

Advertencia

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

?>

Notas

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;
}

?>