$GLOBALS
En esta página
\$GLOBALS
Hace 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 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();
?>
Resultado del ejemplo anterior es similar a:
$foo en el contexto global : Contenido de ejemplo
$foo en el contexto actual : variable local
[!WARNING] A partir de PHP 8.1.0, el acceso en escritura al array entero
$GLOBALSya no es soportado:Escribir en el array entero
$GLOBALSresultará 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#
[!NOTE] Esto es una 'superglobal', o variable global automática. Esto significa simplemente que esta variable está disponible en todos los contextos del script. No es necesario hacer
global $variable;para acceder a ella en las funciones o los métodos.[!NOTE] A diferencia de todas las demás superglobales,
$GLOBALSsiempre ha estado disponible en PHP.[!NOTE] A partir de PHP 8.1.0,
$GLOBALSes 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$GLOBALSestaba 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; }
?>
```