Les Variables Et Constantes

Temps d'étude : 1h. Niveau : Moyen.
Tags : Les Variables Et Constantes
Fichier(s) utile(s) pour ce cours : /

Les Variables : Types - Déclaration - Affectation

Définition d'une variable

Une variable est un espace nommé permettant de conserver une valeur.

Une variable porte un nom (que l'on définit nous même) et elle permet de conserver une valeur pour la transporter dans notre script.

Il arrive régulièrement que nous ayons connaissance d'une information ligne 27 (par exemple) et que nous voulions la ré-utiliser ligne 232 (par exemple) .

Pour retenir une information en mémoire : nous utilisons une variable !

flécheA quoi ça sert une variable ?
une variable permet de garder une informations en mémoire (durant l'exécution du script), nous pouvons la consulter ou l'utiliser plus tard dans l'exécution du script.


Pourquoi utiliser des variables ?
Pour 1000 choses différentes, si nous évoquions toutes les situations cela risquerait de vous semer car vous n'avez pas encore le niveau pour comprendre les réponses qui font appel à d'autres aspects techniques.
Alors tant que vous êtes encore jeune dév apprenti, n'oubliez pas de vous concentrer sur la question « comment ça marche? » plutôt que vous distraire sur la question « à quoi ça sert? ».
J'insiste mais c'est important, avec mon expérience de formateur j'ai vu trop de gens se braquer et abandonner sous pretexte qu'ils ne voyaient pas où cet apprentissage allait les emmener.


Voici un exemple pratique avec un prenom :

	<?php
	echo "

Bonjour Fred

"; echo "

Comment va-tu Fred ?

"; echo "

Voici tes informations de profil Fred ...

";

Vous voyez la répétition ? si nous avons besoin d'appeler le prénom Fred à plusieurs endroits différents, cela risque d'être embéttant.

Pour cela, nous pourrions prévoir une variable qui gardera en mémoire le prénom de l'internaute.

Exemple :

entrainement.php
	<?php
	$prenom = "Fred";
	
	echo "

Bonjour $prenom

"; echo "

Comment va-tu $prenom ?

"; echo "

Voici tes informations de profil $prenom ...

";

fléche Informations
pour que cet exemple fonctionne parfaitement, il faudra prévoir l'utilisation de guillemets plutôt que des quotes (apostrophes)


Avec cet exemple, vous verrez que nous déclarons (ligne 2) la variable prenom contenant la valeur "Fred", cela permet de garder l'information en mémoire pour ensuite nous la ré-utiliser facilement à plusieurs reprises sur les lignes 4, 6 et 8. (nous transportons de lignes en lignes le prénom grâce à notre variable !)

A vous de faire le test dans votre navigateur !

résultat

Bonjour Fred

Comment va-tu Fred ?

Voici tes informations de profil Fred ...


Explications et décomposition du code

Une variable est toujours déclarée avec le symbole $ (dollar),

Ensuite nous précisons le nom de la variable, ici nous avons choisi prenom, ce qui donne $prenom.

Le signe égal " = " est dans ce contexte un opérateur d'affectation.

"Fred" est la valeur entrante dans la variable pour être gardée en mémoire tout le temps d'exécution du script.

L'instruction echo permet quant à elle uniquement de faire des affichages.

Voici un peu de vocabulaire (utile si vous vous retrouvez à travailler à plusieurs, ou en entreprise) :

On dit que l'on déclare la variable $prenom et qu'on lui affecte la valeur Fred.

Autre avantage, si nous devons changer le prenom, nous le ferons qu'à un seul endroit et il sera répercuté partout :

entrainement.php
	<?php
	$prenom = "Nicolas";
	
	echo "

Bonjour $prenom

"; echo "

Comment va-tu $prenom ?

"; echo "

Voici tes informations de profil $prenom ...

";

Imaginez qu'il y ait 1 000 lignes qui fassent appel à la variable $prenom, nous ferons qu'une seule modification ligne n°2 et elle sera répercutée partout par la suite.

résultat

Bonjour Nicolas

Comment va-tu Nicolas ?

Voici tes informations de profil Nicolas ...


Pour mieux se représenter ce qu'est une variable, voici une métaphore :
Une variable est comme une petite boite dans laquelle nous rangeons quelque chose, plus tard nous rouvrons notre boite et retrouvons ce que nous avions introduit.

A l'origine la variable n'existe pas :
explication PHP

Nous déclarons la variable $prenom avec l'information "Fred" à l'intérieur :
explication PHP

Cette information est conservée à l'intérieur de la variable :
explication PHP

Plus tard, nous avons besoin de connaitre l'information contenue dans notre variable (nous rouvrons notre boite) :
explication PHP

Comme son nom l'indique, une variable ça peut varier !

Le contenu d'une variable n'est pas "figé", il peut être modifié à tout moment, voici un exemple :

entrainement.php
	<?php
	$prenom = "Fred";
	
	echo "

Bonjour $prenom

"; echo "

Comment va-tu $prenom ?

"; $prenom = "Marie"; echo "

Voici tes informations de profil $prenom ...

";

N'oubliez pas d'enregistrer votre fichier et de faire des tests dans le navigateur !

résultat

Bonjour Fred

Comment va-tu Fred ?

Voici tes informations de profil Marie ...


Cela n'a pas de sens dans le cas présent de modifier subitement le prénom d'une personne mais ce code vous démontre qu'une variable est interchangeable et ce autant de fois qu'on le souhaite (même en cours de route) ! Ceci sera très pratique pour nos futures programmation.

Nom de variable

Le nom d'une variable doit être explicite, le nom peut être définit en fonction de l'information qu'elle contient.
Si ma variable est destinée à contenir "rouge", je pourrais la nommer $couleur.

Le nom d'une variable doit respecter certaines régles
Par exemple, elle ne doit pas commencer par 1 chiffre mais peut en contenir :
Exemple : $voiture2 mais pas $2voiture.
Nous pouvons mettre toutes les lettres de l'alphabet (A à Z) dans nos variables (en majuscule ou minuscule).
Nous ne pouvons pas mettre de caractères spéciaux, pas d'espace, et bien entendu on évite les accents sur des noms de variable : $prenom et non pas $prénom.

Respecter une convention de nommage
Il faut absolument éviter (pour vous et pour les autres développeurs qui rejoindront ou récupérerons votre projet) de nommer des variables avec des noms de convention différentes.
Exemple : $mon-prenom, $mon_prenom, $monPrenom, $MoNpReNoM, $pren, $info, $_monprenom.

Plusieurs conventions de nommage existent, l'essentiel c'est d'en choisir une et de la garder du début à la fin de votre programmation, je vous suggère la syntaxe suivante : $monPrenom.

Cela consiste à inscrire une majuscule lorsqu'un espace doit avoir lieu. (la première lettre est une minuscule).

N'oubliez pas d'enregistrer votre fichier et de faire des tests dans le navigateur !

Les variables sont sensibles à la casse, par conséquent, si vous déclarez une variable contenant une majuscule, il ne faudra pas se tromper au moment de lui demander de s'afficher.

Exemple :

	<?php
	$monPrenom = "Fred";
		
	echo $monPrenom; // affiche : Fred
		
	echo $monprenom; // affiche une erreur "undefined variable..." soit variable indéfinie (inconnue)	

En effet, sur les lignes 2 et 4 les variables sont nommées de la même manière, il n'y a donc aucun problème.

Sur la ligne 6, le "p" de prenom ainsi que toutes les autres lettres sont en minuscule, ce qui ne correspond pas à la déclaration de notre variable ligne 2.

Les types de variables

Reprenons notre fichier entrainement.php pour les tests :

entrainement.php
	<?php
	$variable1 = 127;
	echo gettype($variable1) . "
";
Sur la ligne n°2, nous faisons une affectation de la valeur 127 dans la variable nommée "$variable1".

Sur la ligne n°3, nous utilisons gettype() qui est une fonction prédéfinie (= prévue par le langage Php) nous permettant de voir le type d'une variable. Dans notre cas, il s'agit d'un integer, ce qui correspond à un entier (un nombre).

Le point nous permet seulement de faire suivre des informations (avec l'utilisation du <br> pour passer à la ligne). Il s'agit de la concaténation dont nous parlerons en détail au chapitre 5.



entrainement.php
	<?php
	$variable2 = 1.5;
	echo gettype($variable2) . "
";
Cette variable est de type double correspondant à un nombre à virgule (déclaré avec un point).


entrainement.php
	<?php
	$variable3 = "une chaîne";
	echo gettype($variable3) . "
";
Là non plus, nous ne regardons pas le contenu d'une variable mais son type : string


entrainement.php
	<?php
	$variable4 = '127';
	echo gettype($variable4) . "
";
C'est toujours le type string, même s'il s'agit d'un nombre, l'utilisation des quotes fait que le php le considère comme une chaine de caractères


entrainement.php
	<?php
	$variable5 = TRUE;
	echo gettype($variable5) . "
";
Type Boolean : TRUE (VRAI, assimilé a 1) ou FALSE (FAUX, assimilé à 0) uniquement.


entrainement.php
	<?php
	$variable6 = FALSE;
	echo gettype($variable6) . "
"; // boolean
Type Boolean : TRUE (VRAI, assimilé a 1) ou FALSE (FAUX, assimilé à 0) uniquement.


résultat

integer

double

string

string

boolean

boolean


Pour débuter, voici les principaux types de variables :

Type Description
integer chiffre ou nombre
string chaine de caractères (texte)
boolean vrai ou faux (TRUE or FALSE)

Il existe d'autres types de variable.

Assignation par référence

Voici une notion importante à comprendre, l'assignation par référence :

entrainement.php
	<?php
	$fruit1 = 'pomme'; // affecte la valeur 'pomme' à $fruit1
	$fruit2 = 'banane'; // affecte la valeur 'banane' à $fruit2
	echo "fruit1 : $fruit1 
"; // affiche : pomme echo "fruit2 : $fruit2
"; // affiche : banane $fruit2 = &$fruit1; // passage de référence (assigne la référence de $fruit1 à $fruit2) echo "fruit1 : $fruit1
"; // affiche : pomme (référence 1) echo "fruit2 : $fruit2
"; // affiche : pomme (référence 1) $fruit2 = 'fraise'; // modifie la valeur de $fruit2 (et de $fruit1 par repercution, même espace mémoire) echo "fruit1 : $fruit1
"; // affiche : fraise echo "fruit2 : $fruit2
"; // affiche : fraise // Si nous changeons $fruit2, $fruit1 change en conséquence (et vice versa), leur destin sont liés puisqu'il représente la même référence qui pointe vers 1 seul et même espace mémoire
Ligne 1 : Ouverture de php (pas difficile ça ! :p)

Ligne 2 : Nous affectons la valeur 'pomme' à la variable $fruit1.

Voici ce qu'il se passe réellement :

explication PHP

Par habitude, on dit que la variable $fruit1 contient la valeur "pomme" pour gagner du temps et aller plus vite lors d'un dialogue.

En réalité, la variable $fruit1 ne contient pas directement de valeur, elle possède la référence 1 qui représente un espace mémoire (avec la même référence, ce qui permet d'assurer la liaison). C'est dans l'espace mémoire 1 qu'est contenu la valeur "pomme".

C'est à dire que la variable n'est pas contenue directement dans la variable au sens propre du mot, la variable est un espace mémoire identifiable par une référence (un numéro, ici le 1) qui mène vers la valeur "pomme".

Question : Pourquoi la variable $fruit1 possède la référence 1 et pas 56 (par exemple) ? Réponse : car c'est la 1ère variable qui a été déclarée.

Ligne 3 : Nous affectons la valeur 'banane' à la variable $fruit2.

explication PHP

Même principe, la variable $fruit2 possède la référence 2 qui mène vers la valeur 'banane'.

Ensuite ligne 4 et 5, nous demandons aux variables de nous donner les valeurs qu'elles contiennent dans leur espace mémoire (la liaison se fait grâce à leur référence), voici l'affichage :

explication PHP

Ligne 6 : par l'utilisation du symbole &, nous assignons la référence 1 de $fruit1 à $fruit2.
Par conséquent, les deux variables $fruit1 et $fruit2 pointent vers la même référence (et donc le même espace mémoire), soit 2 variables qui pointent vers la référence 1

explication PHP

Ligne 7 et 8 : nous demandons des affichages ce qui confirme le schéma d'au dessus.

Ligne 9 : Dorénavant, le destin de $fruit1 et $fruit2 sont liés.
Si je change la variable $fruit2, $fruit1 changera en conséquence puisqu'il pointe vers le même espace mémoire (même référence)
N'oubliez pas, nous ne changeons pas la variable en elle même mais le contenu quelle représente (dans l'espace mémoire) et la liaison se fait avec la référence.

explication PHP

Si nous changeons $fruit2, $fruit1 change en conséquence (et vice versa), leur destin sont liés puisqu'ils représentent la même référence qui pointe vers 1 seul et même espace mémoire

C'est donc ce qu'on appelle un passage de référence.

résultat

fruit1 : pomme

fruit2 : banane

fruit1 : pomme

fruit2 : pomme

fruit1 : fraise

fruit2 : fraise


Assignation de valeur

Différent du passage de référence, voici le passage de valeur :

entrainement.php
	<?php
	$fruit1 = 'pomme'; // affecte la valeur 'pomme' à $fruit1
	$fruit2 = 'banane'; // affecte la valeur 'banane' à $fruit2
	echo "fruit1 : $fruit1 
"; // affiche : pomme echo "fruit2 : $fruit2
"; // affiche : banane $fruit2 = $fruit1; // passage de valeur ($fruit2 contient maintenant "pomme") echo "fruit1 : $fruit1
"; // affiche : pomme (référence 1) echo "fruit2 : $fruit2
"; // affiche : pomme (référence 1) $fruit2 = 'fraise'; // modifie la valeur de $fruit2 uniquement echo "fruit1 : $fruit1
"; // affiche : pomme echo "fruit2 : $fruit2
"; // affiche : fraise // $fruit2 et $fruit1 ne sont pas liés, ils possèdent des références différentes et pointent vers des espaces mémoire différents.
Ligne 2 : Nous affectons la valeur 'pomme' à la variable $fruit1.

Ligne 3 : Nous affectons la valeur 'banane' à la variable $fruit2.

Ligne 4 : Nous affichons la valeur de la variable $fruit2, soit : pomme.

Ligne 5 : Nous affichons la valeur de la variable $fruit1, soit : banane.

Ligne 6 : Nous passons la valeur de la variable $fruit1 à la variable $fruit2 (uniquement la valeur, pas de passage de référence sans le symbole &.

Ligne 7 : Nous affichons la valeur de la variable $fruit1, soit : pomme.

Ligne 8 : Nous affichons la valeur de la variable $fruit2, soit : pomme.

Ligne 9 : Nous modifions la valeur de la variable $fruit2, soit : fraise.

Ligne 10 : Nous affichons la valeur de la variable $fruit1, soit : pomme.

Ligne 11 : Nous affichons la valeur de la variable $fruit2, soit : fraise.

Comme vous pouvez le constater, $fruit2 et $fruit1 ne sont pas liés, ils possède des références différentes et pointe vers des espaces mémoire différent.

Voici le schéma final de nos variables :

explication PHP

résultat

fruit1 : pomme

fruit2 : banane

fruit1 : pomme

fruit2 : pomme

fruit1 : pomme

fruit2 : fraise


fléche Ne l'oubliez pas
Une variable est une zone en mémoire du système, qui sert à conserver une valeur.


Les constantes

A quelques détails près une constante c'est comme une variable, son rôle est de conserver une valeur.

Sauf que dans son cas, la valeur ne pourra pas changer durant l'exécution du script, en effet comme son nom l'indique, une constante c'est constant ! Alors qu'une variable ça peut varier.

Au niveau de la convention de nommage, une constante s'écrit toujours en majuscule.

Au niveau de la syntaxe, la déclaration est différente :

entrainement.php
	<?php
	define("CAPITALE","Paris");
	echo CAPITALE . "
";
define est une fonction prédéfinie (prévue par le langage PHP) permettant de définir une constante en annonçant d'abord son nom, puis ensuite sa valeur.

Par convention, une constante se déclare toujours en majuscule.

Nous demandons ensuite l'affichage du contenu de la constante nommée CAPITALE : Paris.

résultat

Paris


Nous ne pourrons pas déclarer d'autres valeurs à l'intérieur de la constante nommée CAPITALE

A quoi peut bien servir une constante ? devons nous utiliser plutôt une variable ou une constante ?
Dans la majorité des cas nous utilisons des variables, cela dépend surtout de la nature de l'information à garder.
Comme nous l'avons évoqué, le contenu d'une constante ne pourra pas être redéfinie durant l'exécution du script, il peut donc être utile de garder certaines informations de manière sûre comme les informations de connexion à une base de données, le chemin fixe vers un dossier du site, etc.

Les constantes magiques

D'autres constantes existent dans le langage PHP, on les appelle des constantes magiques, exemple :

entrainement.php
	<?php
	echo __FILE__  . "
"; // Affiche le chemin complet vers le fichier actuel echo __LINE__ . "
"; // Affiche le numéro de la ligne
D'autres constantes magiques existent, voici le lien vers la documentation officielle de PHP.