Parmi les concepts les plus importants de la programmation figure la notion de variable. C'est une notion à assimiler et maîtriser pour pouvoir entreprendre les premières applications de base. Nous verrons que les variables font partie des mécanismes qui permettent de rendre une application dynamique. Entrons dans le vif du sujet.
Une variable est une structure de données de type primitif (entier, réel, caractère, chaîne de caractères, booléen ou null) ou bien de type structuré (tableau ou objet) qui permet de stocker une ou plusieurs valeurs. Chaque valeur d'une variable est susceptible d'être remplacée par une autre au cours de l'exécution du programme. D'où le terme « variable ». En programmation, une variable est définie suivant 4 informations essentielles listées ci-après :
Schématiquement, une variable peut être assimilée à une boîte opaque sur laquelle est collée une étiquette portant un nom (le nom de la variable). A l'intérieur de ce paquet se trouve quelque chose (la valeur) d'un type précis (le type de la variable). Quand nous souhaitons obtenir cette valeur, nous ne nous adressons pas directement à elle mais nous y faisons référence en sélectionnant la boîte par son nom.
Prenons un exemple plus parlant. Un médecin souhaite obtenir une information concernant l'état de santé d'un de ses patients (Mr Charles Dupont). Pour l'obtenir, il devra demander à sa secrétaire de lui sortir le dossier Charles Dupont dans lequel se trouve cette information qu'il ne connait pas !
Après cette introduction plutôt théorique, nous entamons la partie pratique du sujet. Il s'agit de la déclaration et de l'initialisation d'une variable en langage PHP. Contrairement à des langages très typés comme C, C++ ou Java; PHP ne porte pas d'importance au typage des variables. Par exemple, pour une même variable, le programmeur est libre de lui affecter une valeur de type entier à un instant T1 puis de lui affecter une chaine de caractères à un instant T2. On dit que PHP est un langage de typage « faible et dynamique ». Cela rend son utilisation plus souple par les développeurs mais pas forcément plus assidue... C'est d'ailleurs quelque chose que l'on peut reprocher à PHP.
Afin d'adopter de bonnes pratiques dès le début, nous vous conseillons de déclarer toute vos variables avec un type et leur affecter une valeur par défaut. Retenez le terme d'affectation au passage.
Par ailleurs, il est nécessaire de nommer les variables avec des noms évocateurs afin de faciliter la lecture du code. Une variable mal nommée sera source de problème lors d'un débugging ou d'une maintenance du programme des semaines plus tard.
Toute variable doit être déclarée au moyen du signe dollars $ suivi obligatoirement de lettres (en majuscules ou minuscules) ou d'un underscore (tiret souligné _ ). Ci-dessous, un tableau récapitulatif des syntaxes correctes et incorrectes de déclaration de variables.
Correct Incorrect Explications Déclaration de variables PHP
$variable
variable
Une variable doit commencer par $
$Variable1
$Variable 1
Les espaces sont interdits
$variable_suite
$variable-suite
Le tiret est interdit
$_variable
$-variable
Le tiret est interdit
$variable2
$2variable
Il ne peut y avoir de chiffre après le $
Note : PHP est l'un des rares langages de programmation acceptant les caractères accentués dans les noms de variables. Cependant les employer est fortement déconseillé pour des raisons de maintenance et de portabilité.
Le script suivant présente la déclaration de 6 variables de types différents. La première et la seconde sont de type chaine de caractères, la troisième de type entier, la quatrième de type booléen, la cinquième de type tableau et la dernière de type Etudiant. Nous n'aborderons pas ces deux derniers dans ce tutoriel. D'autres tutoriels sont dédiés aux tableaux et à la programmation orientée objet.
Déclaration de variables de types différents
<?php
$prenom = 'Hugo'; // Type string (chaine de caractères)
$nom = "Hamon"; // Type string (chaine de caractères)
$age = 19; // Type entier
$estEtudiant = true; // Type booléen
$cours = array('physique','chimie','informatique','philosophie'); // Type tableau
$unEtudiant = new Etudiant(); // Objet de type Etudiant
?>
Pour déclarer une variable de type :
Note : le type d'une variable n'est pas déclaré explicitement comme en Java, C ou encore C++ mais implicitement au moment de l'affectation d'une valeur.
Les noms de variables sont sensibles à la casse, ce qui signifie que l'interprêteur fera la différence entre deux variables écrites différemment. Par exemple, $nom et $NOM seront considérées comme deux variables complètement distinctes.
Par convention, les noms de variables composés de plusieurs mots (exemple : $estEtudiant) doivent avoir le premier mot en minuscules et les autres mots avec la première lettre en majuscule. Cette règle n'est pas à obligatoirerent à suivre mais fortement conseillée dans la mesure où elle fait partie des bonnes pratiques de programmation.
Note : il est recommandé de placer la directive error_reporting du php.ini à E_ALL sur toutes vos pages afin de faire remonter toute erreur générée. Les variables mal déclarées ou non initialisées peuvent être source d'erreur d'analyse.
L'affectation permet de fixer une valeur à une variable. Elle s'effectue au moyen du symbole égal =. Dans le script précédent, nous avons déclaré 6 variables et leur avons affecté à chacune une / plusieurs valeur(s) par défaut.
L'exemple ci-dessous montre comment changer la valeur d'une variable. Rien n'est compliqué puisque c'est exactement la même chose que précédemment.
<?php
$prenom = 'Hugo';
$age = 19;
echo $prenom; // Affiche 'Hugo'
echo '<br/>';
echo $age; // Affiche 19
$prenom = 'Hadrien';
$age = 18;
echo $prenom; // Affiche 'Hadrien'
echo '<br/>';
echo $age; // Affiche 18
?>
Explications : nous avons deux variables initialisées $prenom et $age Nous affichons leur valeur pour les contrôler. Puis nous actualisons les variables en leur affectant à chacune une nouvelle valeur. Enfin, nous affichons les nouvelles valeurs. Nous remarquons alors que nous avons perdu les valeurs originales. Une affectation entraîne donc l'écrasement de l'ancienne valeur par la nouvelle.
Sous ce terme un peu « barbare » se cache un principe fondamental lié des variables. La concaténation n'est ni plus ni moins que l'opération permettant d'assembler deux ou plusieurs informations dans une variable. Cette opération se réalise au moyen de l'opérateur de concaténation qui est le point (.). Illustrons cela avec un exemple :
La concaténation
<?php
// Déclaration des variables
$prenom = 'Hugo';
$nom = 'Hamon';
$identite = '';
// On concatène $nom et $prenom dans $identite
$identite = $prenom .' '. $nom;
// Affiche 'Hugo Hamon'
echo $identite;
?>
Nous avons placé ici dans la variable $identite, le contenu de la variable $prenom suivi d'un espace par concaténation et enfin le contenu de la variable $nom.
Nous aurions également pu procéder de la manière suivante, ce qui nous évite d'employer une nouvelle variable $identite.
Autre exemple de concaténation
<?php
// Déclaration des variables
$prenom = 'Hugo';
$nom = 'Hamon';
// On concatène $nom dans $prenom
$prenom .= ' '. $nom;
// Affiche 'Hugo Hamon'
echo $prenom;
?>
La syntaxe de concaténation ci-dessus signifie que l'on ajoute l'espace et le contenu de la variable $nom à la suite du contenu de la variable $prenom. Ainsi, cette syntaxe est similaire à celle-ci :
Les variables peuvent contenir des nombres. Il est donc logique que nous puissions opérer mathématiquement sur ces valeurs. PHP propose une série d'opérateurs mathématiques assurant cela. Il est donc possible d'additionner, diviser, multiplier, ou encore soustraire les valeurs des variables.
Les exemples ci-dessous illustrent l'emploi de ces différents opérateurs mathématiques.
Opérations mathématiques sur les variables
<?php
// Déclaration des variables mathématiques
$a = 10;
$b = 2;
$c = 0;
// $c vaut 10+2 = 12
$c = $a + $b;
// $c vaut 10x2 = 20
$c = $a * $b;
// $c vaut 10/2 = 5
$c = $a / $b;
// $c vaut 10-2 = 8
$c = $a - $b;
// $c vaut le reste de la division de $a par $b soit 0
$c = $a % $b;
// Incrémentation de $a
$a++;
// Décrémentation de $b
$b--;
?>
L'opérateur modulo (%) retourne le reste de la division de deux nombres.
L'opérateur d'incrémentation augmente de 1 la valeur de la variable. La syntaxe $a++ est identique à $a+=1 et $a = $a+1.
L'opérateur de décrémentation diminue de 1 la valeur de la variable. La syntaxe $b-- est identique à $b-= 1 et $b = $b-1.
Pour plus d'informations concernant les opérateurs mathématiques, nous vous conseillons de vous reporter au tutoriel « les opérateurs arithmétiques, logiques et binaires ».
Elles sont apparues avec la version 4 de PHP et on les appelle aussi « variable variable ». Concrètement, une variable dynamique repose sur le fait que la valeur d'une variable devienne à son tour une variable. Prenons un exemple :
Utilisation des variables dynamiques
<?php
// Définition des variables
$poupee = 25;
$voiture = 17;
$console = 250;
// Choix d'un jouet
$jouet = 'console';
// Affichage du prix du jouet sélectionné
echo $jouet ,' : ', $$jouet ,'€'; // Retourne 'console : 250€'
?>
Dans cet exemple, nous déclarons 3 variables qui représentent les prix de 3 jouets (une poupée, une voiture et une console de jeux vidéo). Puis nous déclarons une variable $jouet dans laquelle on stocke le nom du jouet pour lequel on désire connaître le prix. Ici nous avons décidé de savoir le prix que vaut la console vidéo. Enfin, au moyen d'une instruction echo(), on affiche le jouet sélectionné (console vidéo) et son prix en faisant une variable variable. Ainsi, $jouet = 'console' mais $$jouet est similaire à $console. En effet, la valeur de $jouet est devenue le nom de la variable.
Note : Bien que leur principe de fonctionnement est intéressant, il est vivement recommandé de ne pas les utiliser. Les tableaux, que nous verrons dans le chapitre suivant, remplissent cette fonction de variables dynamiques.
Dans un programme, il est très souvent utile de savoir si une variable existe avant de pouvoir l'exploiter. Le langage PHP met à disposition des développeurs la fonction (même structure du langage) isset() qui permet de savoir si oui ou non la variable passée en paramètre existe. Cette fonction retourne un booléen TRUE ou FALSE. Illustrons ceci avec un exemple :
Test d'existence de variables dans un programme
<?php
// Déclaration de la variable
$prenom = 'Hugo';
echo isset($prenom); // Retourne TRUE -> affiche 1
echo '<br/>';
echo isset($nom); // Retourne FALSE -> n'affiche rien
?>
Dans notre exemple, $prenom est bien déclarée donc la fonction isset() retourne TRUE. Quant à la variable $nom, elle n'est pas déclarée dans le programme donc la fonction isset() retourne FALSE.
Note : nous conseillons plutôt d'utiliser la fonction empty() qui permet de savoir si une variable est vide ou non. Ainsi en faisant ce test, elle permet de connaître deux choses :
- La variable existe ou non(elle est déclarée)
- La variable contient une valeur ou bien est vide (null par exemple)
Il est aussi parfois utile de détruire les variables qui encombrent le programme et qui ne servent plus. Par défaut, toutes les variables sont automatiquement effacées à la fin de l'exécution du programme mais il est néanmoins possible de forcer leur suppression en cours d'exécution. Pour se faire, PHP dispose de la fonction (ou plutôt la structure de langage) unset() qui prend en paramètre la variable à supprimer.
Suppression d'une ou plusieurs variables
<?php
// Déclaration des variables
$prenom = 'Hugo';
$nom = 'Hamon';
$age = 19;
$estEtudiant = true;
// Suppression d'une variable
unset($prenom);
// Suppression de plusieurs variables
unset($nom, $age, $estEtudiant);
?>
Note : si l'on souhaite supprimer plusieurs variables d'un coup, il suffit de les lui préciser en les séparant par une virgule.
Ce cours nous a permis de définir les notions de variable, de déclaration, d'initialisation mais aussi les principes de concaténation, d'opérations mathématiques et de variables dynamiques. Nous sommes désormais à même de nous lancer dans des programmes plus complexes.