(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é :
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é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;
}
?>