En PHP, les variables sont représentées par un signe dollar "$" suivi du nom de la variable. Le nom est sensible à la casse.
Un nom de variable valide commence par une lettre
(A-Z, a-z, ou les octets de 128 à 255)
ou par un souligné (_), suivi de lettres, chiffres ou
soulignés. Exprimé sous la forme d'une expression
régulière, cela donne :
^[a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*$
Note:
Les noms de variables sont comparés octet par octet, et non caractère par caractère. PHP n'interprète ni ne valide l'encodage des octets de 128 à 255, et deux noms désignent la même variable uniquement si leurs octets sont identiques.
Une conséquence est que les noms écrits en UTF-8 fonctionnent, car chaque octet d'une séquence multi-octet UTF-8 se situe dans la plage acceptée. Il en va de même pour tout encodage dont les octets non ASCII se situent tous dans cette plage, ainsi que pour des suites d'octets qui ne constituent un texte valide dans aucun encodage. Les encodages qui utilisent des octets inférieurs à 128 au sein d'une séquence multi-octet, comme Shift-JIS ou UTF-16, ne fonctionnent pas.
Une autre est que deux noms qui s'affichent de manière identique peuvent être distincts.
äencodé en U+00E4 etasuivi du tréma combinant U+0308 sont deux variables différentes, tout comme un nom avec et sans une espace insécable U+00A0 finale.
Note:
$thisest une variable spéciale, qui ne peut pas être assignée. Avant PHP 7.1.0, l'affectation indirecte (c.-à-d. en utilisant les variables variables) était impossible.
Jetez un oeil sur Guide de nommage de l'espace utilisateur.
Exemple #1 Noms de variables valides
<?php
$var = 'Jean';
$Var = 'Paul';
echo "$var, $Var"; // affiche "Jean, Paul"
$_4site = 'pas encore'; // valide : commence par un souligné
$täyte = 'mansikka'; // valide : 'ä' est ASCII (étendu) 228.Exemple #2 Noms de variables invalides
<?php
$4site = 'pas encore'; // invalide : commence par un nombrePHP accepte une séquence de n'importe quels octets comme nom de variable. Les noms de variables qui ne respectent pas les règles de nommage mentionnées ci-dessus ne peuvent être accédés que dynamiquement à l'exécution. Voir variables variables pour plus d'informations sur la façon d'y accéder.
Exemple #3 Accéder à des noms de variables inhabituels
<?php
${'nom-invalide'} = 'bar';
$nom = 'nom-invalide';
echo ${'nom-invalide'}, " ", $$nom;L'exemple ci-dessus va afficher :
bar bar
Par défaut, les variables sont toujours assignées par valeur. C'est-à-dire, lorsqu'une expression est affectée à une variable, la valeur de l'expression est recopiée dans la variable. Cela signifie, par exemple, qu'après avoir assigné la valeur d'une variable à une autre, modifier l'une des variables n'aura pas d'effet sur l'autre. Pour plus de détails sur ce genre d'assignation, se reporter aux expressions.
PHP permet aussi d'assigner les valeurs aux variables par référence. Cela signifie que la nouvelle variable ne fait que référencer (en d'autres termes, "devient un alias de", ou encore "pointe sur") la variable originale. Les modifications de la nouvelle variable affecteront l'ancienne et vice versa.
Pour assigner par référence, il suffit d'ajouter
un & (ET commercial) au début de la variable qui
est assignée (la variable source). Dans l'exemple suivant,
Mon nom est Pierre s'affichera deux
fois :
<?php
$foo = 'Pierre'; // Assigne la valeur 'Pierre' à $foo
$bar = &$foo; // Référence $foo avec $bar.
$bar = "Mon nom est $bar"; // Modifie $bar...
echo $bar . PHP_EOL;
echo $foo . PHP_EOL; // $foo est aussi modifiéeUne chose importante à noter est que seules les variables peuvent être assignées par référence.
<?php
$original = 25;
$ref1 = &$original; // assignation valide
$ref2 = &(24 * 7); // assignation invalide : référence une expression sans nom<?php
// Noter l'absence de & indiquant un retour par référence dans la déclaration de la fonction.
// Autrement dit, la fonction ne retourne pas une référence, donc le résultat ne peut pas être assigné par référence.
function test()
{
$original = 25;
return $original;
}
// Note : un avis est émis, mais la valeur sans référence est assignée
$result1 = &test(); // invalide car test() ne retourne pas une variable par référence.
var_dump($result1);
// Cette fonction est définie comme retournant une référence, mais ne retourne pas une variable
function &test2()
{
return 26; // invalide car la valeur retournée n'est pas une référence à une variable.
}
// Note : la valeur sans référence est assignée
$result2 = &test2();
var_dump($result2);
Il n'est pas nécessaire de déclarer des variables en PHP, cependant, c'est une très
bonne pratique. Accéder à une variable non définie entraînera un
E_WARNING (avant PHP 8.0.0, E_NOTICE).
Une variable non définie a une valeur par défaut de null.
La construction de langage isset() peut être utilisée
pour détecter si une variable a déjà été initialisée.
Exemple #4 Valeur par défaut d'une variable non initialisée
<?php
// Une variable non initialisée et non référencée (pas de contexte d'utilisation).
var_dump($unset_var);L'exemple ci-dessus va afficher :
Warning: Undefined variable $unset_var in ... NULL
PHP permet l'autovivification de tableaux (création automatique de nouveaux tableaux) à partir d'une variable non définie. Ajouter un élément à une variable non définie créera un nouveau tableau et ne générera pas d'avertissement.
Exemple #5 Autovivification d'un tableau à partir d'une variable non définie
<?php
$unset_array[] = 'valeur'; // Ne génère pas d'avertissement.
var_dump($unset_array);Compter sur la valeur par défaut d'une variable non initialisée est problématique lorsqu'un fichier inclus dans un autre utilise le même nom de variable.
Une variable peut être détruite en utilisant la construction de langage unset().
Pour plus d'informations sur les fonctions liées aux variables, consulter la Référence des fonctions sur les variables.