Hace referencia a todas las variables disponibles en un contexto global

# $GLOBALS

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

$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 #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();

    ?>

Resultado del ejemplo anterior es 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: 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.

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

>     ?>

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open