Dans PHP, les variables peuvent provenir de plusieurs sources :

- définies par le développeur,
- définies automatiquement par PHP en fonction du contexte d'utilisation.

Ce qui est très surprenant pour les habitués des langages fortement typés (cf C, Java, etc), c'est que dans PHP le typage des variables est dynamique : une variable est du type de la donnée qu'elle contient à un instant T.

Les variables créées et utilisées par le développeur doivent respecter certaines règles de nommages et obéissent à des règles de portée dans le script.

### Principes

- Le nom des variables doit être préfixé avec $
- Le nom des variables doit commencer par une lettre ou le caractère _ (underscore). Les caractères suivants peuvent être des lettres, des nombres, le caractère _.

  Note : une lettre est définie comme les caractères "a" à "z" (minuscule ou majuscule), et n'importe quel caractère avec une valeur ASCII comprise entre 127 et 255 (ce qui inclut les caractères accentués).

- Les noms de variables sont sensibles aux majuscules et aux minucules. $var, $VAR et $vAR sont 3 variables différentes.
- Les variables n'ont pas besoin d'être déclarées. La première fois qu'une valeur est affectée (ou assignée) à une variable, la variable est créée.
- Le type d'une variable n'est pas déclaré. C'est PHP qui au moment de l'exécution et en fonction du contexte d'utilisation définit le type de la variable. Si nous affectons une chaîne de caractères à la variable $var, elle devient une chaîne de caractère. Si nous lui affectons ensuite un nombre entier, elle devient un entier.

Exemple : variables
<!DOCTYPE html> <html lang="fr"> <head><title>Variables</title></head> <body> <?php $x = 'François'; // La variable $x est crée. // Elle est de type chaîne de caractères echo '<p>La variable x est égale à ', $x; echo '<br>Elle est du type ', gettype($x); $x = 12345; // La variable $x est convertie // automatiquement en entier. echo '<p>La variable x est égale à ', $x; echo '<br>Elle est maintenant du type ', gettype($x); $x = 12345.678 * 10 + 15; // La variable $x est convertie // automatiquement en double. echo '<p>La variable x est égale à ', $x; //pour afficher $x, l'instruction echo convertit //sa valeur en chaîne echo '<br>Elle est maintenant du type ', gettype($x); ?> </body> </html>

Dans l'exemple, différentes valeurs sont affectées successivement à la même variable. Nous utilisons la fonction gettype() pour connaître le type affecté à la variable par PHP.
C'est PHP qui gère automatiquement les changements de type.

Nous avons la possibilité de forcer une variable à être d'un certain type en utilisant la syntaxe suivante :
$x = (type) valeur;

type peut être int, integer, bool, boolean, real, double, float, string, array, object

Par exemple :
$x = (string) 12;
créée une variable de type chaîne contenant la valeur 12. C'est équivalent à :
$x = '12';
$x contient donc une chaîne numérique.

### Affectation par référence

Généralement, les variables sont affectées par valeur : nous donnons directement une valeur à la variable ($a = 100), ou une variable prend la valeur d'une autre variable ($b = $a). L'affectation ($b = $a) affecte dans la variable $b une copie de la variable $a : chacune des variables occupe un espace mémoire différent. Si nous changeons la valeur de $a, $b n'est pas modifiée.

Nous pouvons aussi affecter des variables par référence. On obtient alors deux variables qui pointent vers le même espace mémoire. Aucune copie n'est faite et les modifications d'une des variables sont visibles dans l'autre variable. Pour affecter une variable par référence, il suffit d'ajouter le caractère & devant le nom de la variable placée à droite de l'opérateur d'affectation.

Exemple : affectation par référence
<!DOCTYPE html> <html lang="fr"> <head><title>Affectation par référence</title></head> <body> <?php echo '<p><b>Affectation normale (ie par valeur)</b>'; $x = 'François'; $y = $x; echo '<p>x est égale à ', $x, '<br>y est égale à ', $y; // changement de la valeur de x $x = 'Piat'; echo '<p>x est égale à ', $x, '<br>y est égale à ', $y; //------------------------------------------------------ echo '<p><b>Affectation par référence</b>'; $x = 'François'; $y = &$x; // Notez le & devant $x echo '<p>x est égale à ', $x, '<br>y est égale à ', $y; // changement de la valeur de x $x = 'Piat'; echo '<p>x est égale à ', $x, '<br>y est égale à ', $y; ?> </body> </html>

### Variables dynamiques

PHP permet aussi de créer des variables dynamiques : nous pouvons référencer la valeur d'une variable comme nom de variable. Pour cela nous utilisons la syntaxe $$ comme dans l'exemple suivant.

Exemple : variables dynamiques
<!DOCTYPE html> <html lang="fr"> <head><title>Variable dynamique</title></head> <body> <?php $x = 'Piat'; $$x = 'François'; // notez le $$ echo '<p> La variable x est égale à ', $x; echo '<p> La variable Piat est égale à ', $Piat; ?> </body> </html>

### Portée d'une variable

La portée d'une variable (scope) dépend de l'endroit où la variable est définie.
Quand une variable est définie dans une fonction, sa portée est locale à la fonction.
Quand une variable est définie en dehors d'une fonction, sa portée est globale à l'ensemble des lignes de script en dehors des fonctions.

Dans l'exemple suivant, nous définissons deux variables :
$x est définie en dehors d'une fonction. Sa valeur est "Piat".
$y est définie dans une fonction. Sa valeur est "François".
Nous affichons ensuite les variables dans le contexte général du script, puis dans le contexte d'une fonction.

Exemple : portée d'une variable
<!DOCTYPE html> <html lang="fr"> <head><title>Portée d'une variable</title></head> <body> <?php $x = 'Piat'; // variable globale echo '<p><b>Dans le script</b>'; echo '<br>valeur de x : ', $x; echo '<br>valeur de y : ', $y; AfficheVariable(); // appel de la fonction //------------------------------------------------------ function AfficheVariable() { $y = 'François'; // variable locale de la fonction echo '<p><b>Dans la fonction</b>'; echo '<br>valeur de x : ', $x; echo '<br>valeur de y : ', $y; } ?> </body> </html>

### Le mot-clé global

L'utilisation du mot-clé global permet à une fonction d'accéder à une variable définie à un niveau global dans le script.

Nous pouvons reprendre l'exemple en permettant à la fonction d'afficher la variable globale x.

Exemple : variable globale
<!DOCTYPE html> <html lang="fr"> <head><title>variable globale</title></head> <body> <?php $x = 'Piat'; // variable globale echo '<p><b>Dans le script</b>'; echo '<br>valeur de x : ', $x; echo '<br>valeur de y : ', $y; AfficheVariable(); // appel de la fonction //------------------------------------------------------ function AfficheVariable() { global $x; // la fonction a maintenant accès // à variable globale x $y = 'François'; // variable fonction echo '<p><b>Dans la fonction</b>'; echo '<br>valeur de x : ', $x; echo '<br>valeur de y : ', $y; } ?> </body> </html>