# $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ée :

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é via sa copie. Auparavant, le tableau $GLOBALS était exclus du comportement usuel par-valeur des tableaux PHP et les variables globales peuvent être modifié via sa copie.

> `<?php
> // Before PHP 8.1.0
> $a = 1;
> $globals = $GLOBALS; // Ostensibly by-value copy
> $globals['a'] = 2;
> var_dump($a); // int(2)
> // As of PHP 8.1.0
> // this no longer modifies $a. The previous behavior violated by-value semantics.
> $globals = $GLOBALS;
> $globals['a'] = 1;
> // To restore the previous behavior, iterate its copy and assign each property back to $GLOBALS.
> foreach ($globals as $key => $value) {
> $GLOBALS[$key] = $value;
> }
> ?>`