(PHP 4, PHP 5, PHP 7, PHP 8)
$GLOBALS — Référence toutes les variables disponibles dans un contexte global
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.
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
À 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
?>
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;
}
?>