Menu

Variables PHP : déclaration, portée, global et static

Une variable PHP commence par $ et se crée en lui affectant une valeur : $name = "Ada";. Il n'y a ni mot-clé de déclaration ni type fixe. Les fonctions ne voient pas les variables extérieures sauf si vous les passez, utilisez global ou les capturez ; static garde une valeur entre les appels.

Cette page contient des éditeurs exécutables - modifiez, exécutez et voyez la sortie instantanément.

Une variable PHP est un nom qui commence par $, et vous la créez en lui affectant une valeur : $name = "Ada";. Il n'y a ni mot-clé de déclaration ni type à préciser, car c'est la valeur qui décide du type. Vous pouvez plus tard lui affecter une valeur d'un autre type.

Règles de nommage des variables

Un nom de variable commence par $, puis une lettre ou un tiret bas, puis des lettres, chiffres ou tirets bas. Les lettres non ASCII comptent comme des lettres, donc $名前 est valide, même si les noms ASCII sont la norme. Les noms sont sensibles à la casse.

NomValide ?
$total, $userName, $user_nameoui
$_count, $item2oui
$2itemsnon, ne peut pas commencer par un chiffre
$user-namenon, c'est $user moins name
$thisnon, réservé à l'objet courant ; l'affecter est une erreur fatale

$city, $City et $CITY sont donc trois variables différentes. Utilisez le snake_case ($first_name) ou le camelCase ($firstName), et tenez-vous à un seul style par projet. Les standards PSR laissent volontairement le nommage des variables libre ; le code Laravel et Symfony utilise surtout le camelCase.

Utiliser des variables dans des chaînes

Entre guillemets doubles, PHP remplace les variables par leur valeur ; entre guillemets simples, non. Entourez la variable d'accolades quand des lettres la suivent directement ou quand vous accédez à un élément de tableau par une clé de type chaîne :

La page sur les chaînes détaille les guillemets, la concaténation et l'interpolation.

Variables non définies et valeurs par défaut

Lire une variable jamais affectée donne null, et votre PHP affiche un warning :

Warning: Undefined variable $discount in /home/index.php on line 3

Vérifiez d'abord avec isset, ou utilisez l'opérateur de fusion null ?? pour fournir une valeur par défaut. Les deux s'exécutent sans warning :

$x ??= 0; est la forme courte de $x = $x ?? 0;. Les valeurs de formulaire et d'URL sont le cas habituel : $page = $_GET['page'] ?? 1;.

La portée des variables dans les fonctions

Les variables définies hors d'une fonction ne sont pas visibles à l'intérieur, et les variables créées dans une fonction disparaissent quand elle se termine. C'est la surprise la plus fréquente pour qui vient de JavaScript :

Sans le ?? 0, la première fonction afficherait un warning sur $taxRate non définie. Passer les valeurs en paramètres rend les fonctions prévisibles et faciles à tester, et c'est la première solution à envisager. La page sur les fonctions traite des paramètres et des valeurs de retour.

Le mot-clé global et $GLOBALS

Quand une fonction doit vraiment utiliser une variable globale, déclarez-la avec global, ou passez par le tableau $GLOBALS, qui contient toutes les variables globales par leur nom :

Les globales rendent le code plus difficile à suivre, car n'importe quelle fonction peut les modifier. On les trouve dans du code ancien et dans les plugins WordPress (global $wpdb;) ; dans du code neuf, passez les valeurs en paramètres ou utilisez une classe.

Les variables static gardent leur valeur

Une variable static dans une fonction est créée une seule fois et garde sa valeur entre les appels. Elle reste locale : le code hors de la fonction ne la voit pas.

Les variables dynamiques ($$name)

$$name utilise la valeur de $name comme nom d'une autre variable. Cela fonctionne, mais un tableau fait presque toujours le même travail plus clairement :

<?php
$field = "color";
$$field = "blue";        // creates $color
echo $color, "\n";

// The clearer way to have names chosen at runtime:
$settings = [];
$settings[$field] = "blue";
echo $settings["color"], "\n";

Copie ou référence

Affecter une variable à une autre copie la valeur, tableaux compris. Ajoutez & devant pour que les deux noms désignent la même valeur :

Les objets se comportent autrement : affecter un objet copie une poignée vers le même objet, donc une modification faite via l'une des variables est visible via l'autre. Utilisez clone pour une vraie copie.

Erreur fréquente : une variable définie dans un if ou une boucle

PHP n'a pas de portée de bloc, donc une variable créée dans un if, un for ou un foreach existe encore après. C'est pratique, mais cela cache un bug : quand le bloc ne s'exécute pas, la variable n'a jamais été créée.

Sans la ligne qui donne une valeur par défaut, un $orders vide laisserait $message non définie et afficherait un warning. Donnez une valeur à chaque variable avant le bloc qui pourrait la définir.

Questions fréquentes

Comment déclarer une variable en PHP ?

Affectez une valeur à un nom qui commence par $ : $count = 10;. PHP n'a pas de mot-clé var ou let ni de type dans la déclaration ; la variable est créée par la première affectation et prend le type de sa valeur.

Pourquoi ma fonction ne voit-elle pas une variable définie à l'extérieur ?

Les fonctions PHP ont leur propre portée locale et ne voient pas automatiquement les variables globales. Passez la valeur en paramètre (la solution propre), déclarez global $name; dans la fonction, ou lisez $GLOBALS['name']. Les closures peuvent la capturer avec use ($name), et les fonctions fléchées fn() la capturent automatiquement.

Qu'est-ce qu'une variable static en PHP ?

Une variable locale déclarée avec static dans une fonction, comme static $calls = 0;. Elle est initialisée une seule fois et garde sa valeur entre les appels de cette fonction, ce qui est utile pour des compteurs et des caches simples.

Les noms de variables PHP sont-ils sensibles à la casse ?

Oui. $name, $Name et $NAME sont trois variables différentes. En revanche, les noms de fonctions et de classes ne sont pas sensibles à la casse en PHP.

Comment supprimer une variable en PHP ?

Appelez unset($name);. Ensuite isset($name) vaut false et la lire déclenche un warning « Undefined variable ». Affecter null garde la variable mais la vide.

Illustration des langages de programmation de Coddy

Apprendre à coder avec Coddy

COMMENCER