Comprendre la portée des variables PHP
En PHP, les variables ont une portée qui détermine où elles peuvent être accessibles et utilisées dans le code. Cette portée est déterminée par l'emplacement où la
La portée d'une variable est la partie de votre programme où cette variable est visible et peut être utilisée. En PHP, la portée est déterminée par l'endroit où vous déclarez la variable : une variable créée au niveau supérieur d'un script est globale, tandis qu'une variable créée à l'intérieur d'une fonction est locale à cette fonction. Fait crucial — et cela surprend souvent ceux qui viennent de JavaScript ou de Python — les fonctions PHP ne voient pas automatiquement les variables du script environnant. Chaque fonction dispose de son propre ensemble privé de variables.
Cette page couvre les trois portées dont vous avez besoin au quotidien en PHP — globale, locale et statique — ainsi que les deux façons d'accéder à une valeur globale depuis l'intérieur d'une fonction (global et $GLOBALS), et quand préférer passer des arguments à la place.
Variables locales
Une variable assignée à l'intérieur d'une fonction a une portée locale : elle n'existe que pendant l'exécution de cette fonction et est invisible partout ailleurs. C'est la portée par défaut et celle que vous devriez utiliser le plus souvent, car elle rend les fonctions autonomes et prévisibles.
<?php
function myFunction() {
$x = 10; // local to myFunction()
echo $x; // works: prints 10
}
myFunction();
echo $x; // Warning: Undefined variable $x
?>Le deuxième echo échoue car $x n'existait pas en dehors de la fonction. L'inverse est également vrai : un $x défini dans le script principal n'est pas visible à l'intérieur de myFunction() à moins que vous ne l'y introduisiez explicitement. Les variables locales sont idéales pour les compteurs, les résultats intermédiaires et tout ce qui est temporaire et que vous ne voulez pas voir se propager dans le reste du programme.
Variables globales
Une variable déclarée au niveau supérieur d'un script — en dehors de toute fonction — a une portée globale. Malgré ce nom, elle n'est pas automatiquement disponible à l'intérieur des fonctions. Pour la lire ou la modifier depuis une fonction, vous devez l'introduire dans la portée avec le mot-clé global.
Sans la ligne global $x;, le $x à l'intérieur de la fonction serait une variable locale distincte et non définie. Le mot-clé global lie le nom local au nom global, de sorte que les modifications effectuées à l'intérieur de la fonction affectent également la valeur à l'extérieur.
Le tableau $GLOBALS
PHP stocke également chaque variable globale dans un tableau superglobal intégré appelé $GLOBALS, indexé par le nom de la variable. Les superglobaux étant visibles dans toutes les portées, cela vous offre une deuxième façon d'accéder à une variable globale sans le mot-clé global :
<?php
$x = 5;
$y = 10;
function addNumbers() {
$GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y'];
}
addNumbers();
echo $z; // Outputs 15
?>Ici, $z est créé dans la portée globale depuis l'intérieur de la fonction. $GLOBALS est pratique lorsque vous avez besoin de plusieurs variables globales à la fois, mais il présente les mêmes inconvénients que global.
Utilisez les variables globales avec parcimonie
Les variables globales créent des dépendances cachées et à distance : n'importe quelle fonction peut les modifier, ce qui rend un bug difficile à tracer. Préférez passer les valeurs en arguments et retourner les résultats, ce qui rend les entrées et sorties de chaque fonction explicites :
<?php
function addNumbers($a, $b) {
return $a + $b;
}
echo addNumbers(5, 10); // Outputs 15
?>Recourez à global ou $GLOBALS uniquement pour une configuration véritablement globale au programme, et non comme raccourci pour éviter de passer des données.
Variables statiques
Normalement, une variable locale est détruite quand la fonction se termine, et repart donc à zéro au prochain appel. Une variable statique est l'exception : déclarée avec le mot-clé static, elle conserve sa valeur entre les appels tout en restant locale (invisible en dehors de la fonction). Elle est parfaite pour mémoriser un état entre les appels — par exemple, compter combien de fois une fonction a été exécutée.
L'initialiseur static $x = 0; ne s'exécute qu'au premier appel ; lors des appels suivants, PHP l'ignore et réutilise la valeur stockée.
Les variables statiques sont déclarées à l'aide du mot-clé static et ne sont accessibles qu'à l'intérieur de la fonction où elles sont déclarées.
Conclusion
En conclusion, les variables en PHP ont une portée qui détermine où elles peuvent être accessibles et utilisées. Comprendre les différents types de portées — globale, locale et statique — peut vous aider à écrire un code plus efficace et performant. En utilisant la portée appropriée pour vos variables, vous pouvez vous assurer que votre code est organisé et facile à maintenir.