Dans PHP, les variables peuvent provenir de plusieurs sources :

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

Exemple : variables

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

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

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

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