W3docs

Comprendre les superglobales PHP et la variable $_GLOBALS

PHP propose des superglobales, des variables prédéfinies accessibles partout dans un script. Découvrez $GLOBALS et comment accéder aux variables globales.

En PHP, une variable déclarée en dehors de toute fonction vit dans la portée globale. Par défaut, le code à l'intérieur d'une fonction ne peut pas accéder à ces variables — PHP maintient la portée des fonctions séparée pour que la logique locale n'écrase pas accidentellement des données non liées. Le tableau $GLOBALS est un moyen de franchir cette limite : c'est une superglobale intégrée qui contient une référence à chaque variable définie dans la portée globale, indexée par nom de variable.

Cette page explique ce qu'est $GLOBALS, en quoi elle diffère du mot-clé global, comment lire et modifier des variables globales via ce tableau, et pourquoi vous devriez généralement préférer une alternative. Si vous débutez avec la portée en général, commencez par Portée des variables et Variables PHP.

Que sont les superglobales PHP ?

Les superglobales sont des variables PHP spéciales et prédéfinies, disponibles dans toutes les portées d'un script. Vous pouvez les lire à l'intérieur de n'importe quelle fonction, méthode ou fichier inclus sans les déclarer au préalable avec global. Elles sont renseignées automatiquement par PHP avant l'exécution de votre code.

La liste complète des superglobales :

  • $_GET — données transmises via la chaîne de requête de l'URL.
  • $_POST — données transmises via un formulaire.
  • $_COOKIE — données transmises via les cookies.
  • $_SESSION — données stockées dans la session de l'utilisateur.
  • $_REQUEST — données combinées de $_GET, $_POST et $_COOKIE.
  • $_SERVER — informations sur le serveur et l'environnement d'exécution.
  • $_ENV — variables d'environnement.
  • $_FILES — fichiers téléversés via un formulaire HTTP POST.
  • $GLOBALS — une référence à toutes les variables de la portée globale.

Pour un aperçu des superglobales liées aux requêtes, consultez Superglobales PHP.

Qu'est-ce que la variable $GLOBALS en PHP ?

$GLOBALS est un tableau associatif dont les clés sont les noms de vos variables globales (sans le $ initial) et dont les valeurs sont des références à ces variables. Comme c'est une superglobale, elle fonctionne depuis n'importe où — ainsi $GLOBALS['x'] accède au même espace de stockage que le $x de premier niveau, peu importe l'endroit du script où vous y accédez.

Voici un exemple illustrant comment la variable $GLOBALS peut être utilisée pour accéder à une variable globale :

Exemple PHP d'utilisation de la variable $GLOBALS pour accéder à une variable globale

<?php

$x = 10;
$y = 20;

function add() {
  global $x, $y;
  return $x + $y;
}

echo add(); // 30

echo $GLOBALS['x']; // 10
echo $GLOBALS['y']; // 20

?>

Dans cet exemple, la fonction add() utilise le mot-clé global pour accéder aux variables $x et $y. En dehors de la fonction, $GLOBALS['x'] et $GLOBALS['y'] atteignent exactement les mêmes variables — aucune déclaration global n'est nécessaire.

$GLOBALS vs. le mot-clé global

Ces deux approches font le même travail mais de manières différentes :

  • Le mot-clé global importe une variable globale dans la portée locale, créant un alias local que vous utilisez ensuite par son nom habituel ($x). Vous devez lister chaque variable souhaitée.
  • $GLOBALS est un tableau que vous indexez par nom ($GLOBALS['x']). Vous ne déclarez rien, et vous pouvez construire la clé dynamiquement (par exemple $GLOBALS[$name]).
<?php

$total = 100;

function withGlobalKeyword() {
  global $total;
  return $total;        // uses the local alias
}

function withGlobalsArray() {
  return $GLOBALS['total']; // indexes the superglobal directly
}

echo withGlobalKeyword(); // 100
echo "\n";
echo withGlobalsArray();  // 100
?>

Les deux affichent 100. Préférez celle qui se lit le plus clairement — mais notez qu'à partir de PHP 8.1, vous ne pouvez plus réaffecter le tableau $GLOBALS dans son ensemble (par exemple $GLOBALS = [...]). L'écriture dans des éléments individuels tels que $GLOBALS['x'] = 5 fonctionne toujours.

Comment utiliser la variable $GLOBALS en PHP

La variable $GLOBALS est un outil puissant en PHP qui permet d'accéder aux variables globales depuis n'importe quelle partie de votre script. Voici quelques façons d'utiliser la variable $GLOBALS :

Accéder aux variables globales

Comme nous l'avons vu dans l'exemple précédent, vous pouvez utiliser la variable $GLOBALS pour accéder à n'importe quelle variable globale définie dans votre script. Voici un autre exemple :

PHP : accéder à n'importe quelle variable globale définie dans votre script

php— editable, runs on the server

Modifier des variables globales

La variable $GLOBALS peut également être utilisée pour modifier des variables globales. Cela peut être utile si vous devez apporter des modifications à une variable globale depuis une fonction ou une classe.

Voici un exemple :

PHP : modifier des variables globales

<?php

$counter = 0;

function increment() {
  global $counter;
  $counter++;
}

increment();
echo $counter; // 1

echo "\n";

$GLOBALS['counter'] = 10;
echo $counter; // 10

?>

Dans cet exemple, la fonction increment() incrémente la valeur de la variable $counter. Cependant, vous pouvez également modifier la valeur de la variable $counter directement via la variable $GLOBALS.

Passer des variables entre fonctions et classes

La variable $GLOBALS peut aussi être utilisée pour passer des variables entre fonctions et classes. Cela peut être utile si vous devez partager des données entre différentes parties de votre script.

Voici un exemple :

PHP : passage de variables globales entre fonctions et classes

<?php

$data = array("name" => "John Doe", "age" => 30);

function display_data() {
  global $data;
  print_r($data);
}

class User {
  function show_data() {
    global $data;
    print_r($data);
  }
}

display_data(); // Array ( [name] => John Doe [age] => 30 )

$user = new User();
$user->show_data(); // Array ( [name] => John Doe [age] => 30 )

$GLOBALS['data']['email'] = "[email protected]";

display_data(); // Array ( [name] => John Doe [age] => 30 [email] => [email protected] )
$user->show_data(); // Array ( [name] => John Doe [age] => 30 [email] => [email protected] )

?>

Dans cet exemple, la fonction display_data() et la classe User accèdent toutes les deux à la variable $data via la variable $GLOBALS. Cela vous permet de faire circuler la variable $data entre les différentes parties de votre script.

Conclusion

La variable $GLOBALS est un outil puissant en PHP qui donne accès à toutes les variables globales définies dans un script PHP. Que vous accédiez à des variables, les modifiiez ou les passiez entre fonctions et classes, la variable $GLOBALS est un outil polyvalent qui peut vous aider à écrire un meilleur code PHP.

Note sur les bonnes pratiques : Bien que $GLOBALS soit utile, s'appuyer massivement sur des variables globales est généralement déconseillé dans le développement PHP moderne. L'état global rend le code plus difficile à tester et à raisonner, car n'importe quelle fonction peut silencieusement modifier une valeur dont une autre partie du programme dépend. Préférez passer les variables en arguments de fonction, retourner des valeurs ou utiliser des propriétés de classe pour une meilleure encapsulation et testabilité. Utilisez $GLOBALS principalement pour des scripts rapides ou lors de l'interopérabilité avec du code hérité.

Pratique

Pratique
En PHP, quels sont les types de variables disponibles dans une portée globale ?
En PHP, quels sont les types de variables disponibles dans une portée globale ?
Was this page helpful?