Les variables
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.
Qu'est-ce qu'une variable ?
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 :
- Un nom
- Un type
- Une / des valeurs
- Une sémantique (un sens) après les opérations effectuées sur cette variable. Plus concrètement, la valeur de la variable est-elle logique par rapport à son contexte initial ?
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 !
Déclaration et initialisation d'une variable
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$unEtudiant = new Etudiant(); // Objet de type Etudiant?>
Pour déclarer une variable de type :
- string : on entoure la chaîne de caractères de guillemets ou d'apostrophes.
- entier, réel ou flottant : on écrit la valeur telle qu'elle. Pour les flottants, la virgule est remplacée par un point (écriture à l'américaine).
- booléen : on écrit true ou false directement.
- sans type : si l'on ne souhaite pas typer la variable, on lui affecte la valeur null.
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 de valeur à une variable
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 '<br/>';$prenom = 'Hadrien';$age = 18;echo '<br/>';?>
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.
La concaténation, c'est quoi ?
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 :
Opérations mathématiques sur les variables
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 ».
Les variables dynamiques
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é?>
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.
Test de l'existence d'une variable
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 '<br/>';?>
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)
Destruction d'une variable
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// Suppression de plusieurs variables?>
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.
Conclusion
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.
Les commentaires
2. Par Emacs le 19/11/2007 21:33
La meilleure solution reste unset(). En faisant $toto = null, tu lui attribues une valeur mais tu ne la supprimes pas de la mémoire.
3. Par Mickaël Wolff le 20/11/2007 21:10
La seule chose que fait en plus unset, c'est de supprimer la variable. Ce qui est en général inutile, surtout lorsque tu programmes en objet (d'ailleurs, unset devrait faire une erreur lorsqu'il est appelé sur un attribut, puisqu'il ne peut pas détruire la variable, mais uniquement la nullifier).
Mais c'est du détail
4. Par greg le 25/12/2007 23:10
Très Très mais alors très mais vraiment très intéressant ces cours.
C'est légèrement plus détaillé que le Sdz et cela fait avancer !! COOLL
5. Par Emacs le 26/12/2007 00:36
C'est le but ! Etre plus complet que la plupart des sites
6. Par tchix le 08/04/2008 13:25
Merci pour le partage de tes connaissances!
C'est clair, précis, documenté et tres pédagogique.
Merci.
Tchix!
7. Par Maman le 24/05/2008 13:51
c'est toujours trèsvsympathique de visiter to nblog
8. Par shark le 24/05/2008 21:30
C'est clair
9. Par ky le 07/06/2008 12:55
merci c limpide franchement bravo
10. Par PasD'IdeesDePseudo le 09/07/2008 17:24
Salut à tous,
Très bon tuto, mais vu l'apprentissage que peut donner A-PHP tout au long de son parcours, ce n'est pas étonnant.
Toutefois, une petite question à propos de la concaténation, quand est-il préférable d'utiliser la dite virgule plutôt que le dit point ?
PasD'IdeesDePseudo
11. Par Emacs le 09/07/2008 23:09
La virgule est uniquement à utiliser avec echo(). Dans tous les autres cas, il faudra avoir retour à l'opérateur de concaténation point.
Merci pour ton commentaire
12. Par Nom d'un chien le 15/07/2008 16:19
Merci pour l'article, tres utile pour un debutant.
13. Par Nico le 12/08/2008 00:36
Pourquoi les variables dynamiques sont vivement déconseillé svp ?
Il y a t-il une source officielle ou des Bench qui le prouve svp ?
14. Par Emacs le 12/08/2008 08:29
Bonjour Nico.
Il ne faut pas les utiliser pour des raisons de lisibilité du code. Les variables dynamiques sont très difficiles à repérer dans un programme et surtout à maintenir aisément. Elles apportent un niveau de complexité du code non négligeable alors que les tableaux réduisent cette dernière. De plus, il vaut mieux utiliser des tableaux car l'on pourra toujours appliquer des actions de test, de tri, de calcul..., ce que l'on ne peut bien sûr pas réaliser avec les variables dynamiques.
15. Par Nico le 12/08/2008 12:27
Bonjour Emacs,
d'accord merci pour ces précisions
J'avais peur que ça soit au niveau performance car j'en utilise quand j'ai pas le choix.
Ca peut s'avérer utile dans certaines conditions.
16. Par Emacs le 12/08/2008 13:03
Normalement tu ferais beaucoup mieux d'utiliser des tableaux plutôt que des variables dynamiques. Essaie de revoir pour ton code (ou ton prochain) pour t'orienter vers cette solution.
17. Par Benamour le 24/09/2008 18:03
Tout bon tuto ! j'en ai parcouru pas mal et celui-ci est le plus complet, merci ! : )
18. Par xsaiddx le 10/03/2009 13:19
bonjour tout le monde
je me demande si les variable dynamique sont deconseille alors sont just un poid superflu au php et sinon qlq un pourrait-il me donner un exemple un peu real ,vu que que suis un vrai debutant alors j'ai besoin de concretiser ca
merci ;]
bon site
19. Par alibaba le 27/06/2009 23:42
Salut Emacs!
C'est pour signaler une erreur.
La ligne concernée est : La syntaxe $b-- est identique à $b-= et $b = $b-1.
$b-=1 au lieu de $b-=
Bonne continuation!!!
20. Par Emacs le 28/06/2009 01:21
Merci Alibaba, c'est corrigé
21. Par Ismael++ le 10/07/2009 19:36
Jamais je n'ai vu des cours aussi courts, complets et compréhensibles à la fois. On apprend vite car les tutos vont à l'essentiel (pas de comédie, de plaisanterie...). Merci Emacs pour ces chefs-d'oeuvre.
22. Par webophile le 13/07/2009 16:57
Merci beaucoup c'est trés pratique
23. Par totor le 28/07/2009 10:15
Vraiment mais Vraiment content !
Je préfère largement ce tuto à celui du sdz !
Il nous explique rapidement alors que celui du sdz est largement plus long !
24. Par Emacs le 30/07/2009 01:44
Merci totor. Ce tutoriel a pour but d'aller à l'essentiel, tout en étant exhaustif et sans prendre le lecteur pour un débutant en dessous du zéro absolu... ce qui est malheureusement tout l'inverse sur le sdz.
25. Par Julien le 15/08/2009 15:52
Oui en effet, tutoriel beaucoup mieux que celui du Site du Zero, le top du top des Tutoriel !
Bravo
1. Par Mickaël Wolff le 19/11/2007 18:09