Référence toutes les variables disponibles dans un contexte global

# $GLOBALS

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

$GLOBALS — Référence toutes les variables disponibles dans un contexte global

### Description

Un tableau associatif contenant les références sur toutes les variables globales actuellement définies dans le contexte d'exécution global du script. Les noms des variables sont les index du tableau.

### Exemples

Exemple #1 Exemple avec $GLOBALS

    <?php

    function test()
    {
        $foo = "variable locale";

        echo '$foo dans le contexte global : ' . $GLOBALS["foo"] . "\n";
        echo '$foo dans le contexte courant : ' . $foo . "\n";
    }

    $foo = "Exemple de contenu";
    test();

    ?>

Résultat de l'exemple ci-dessus est similaire à :

    $foo dans le contexte global : Exemple de contenu
    $foo dans le contexte courant : variable locale

Avertissement

À partir de PHP 8.1.0, l'accès en écriture au tableau entier $GLOBALS n'est désormais plus supporté :

Exemple #2 Écrire au tableau entier $GLOBALS résultera en une erreur.

    <?php

    // Génère une erreur lors de la compilation :
    $GLOBALS = [];
    $GLOBALS += [];
    $GLOBALS =& $x;
    $x =& $GLOBALS;
    unset($GLOBALS);
    array_pop($GLOBALS);
    // ...et toute autre opération d'écriture/lecture-écriture sur $GLOBALS

    ?>

### Notes

> Note: Ceci est une 'superglobale', ou variable globale automatique. Cela signifie simplement que cette variable est disponible dans tous les contextes du script. Il n'est pas nécessaire de faire global $variable; pour y accéder dans les fonctions ou les méthodes.

> Note: Disponibilité des variables

> Contrairement à toutes les autres superglobales, $GLOBALS a toujours été disponible en PHP.

> Note:

> À partir de PHP 8.1.0, $GLOBALS est désormais une copie en lecture seule du tableau de symbole global. C'est-à-dire que les variables globales ne peuvent pas être modifiées via sa copie. Auparavant, le tableau $GLOBALS était exclu du comportement usuel par-valeur des tableaux PHP et les variables globales pouvaient être modifiées via sa copie.

>     <?php

>     // Avant PHP 8.1.0
>     $a = 1;

>     $globals = $GLOBALS; // Copie par valeur en apparence
>     $globals['a'] = 2;
>     var_dump($a); // int(2)

>     // À partir de PHP 8.1.0
>     // ceci ne modifie plus $a. Le comportement précédent violait la sémantique par valeur.
>     $globals = $GLOBALS;
>     $globals['a'] = 1;

>     // Pour restaurer le comportement précédent, itérer sa copie et réassigner chaque propriété à $GLOBALS.
>     foreach ($globals as $key => $value) {
>         $GLOBALS[$key] = $value;
>     }

>     ?>

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