Exercices
Questions à choix multiple

Leçon N° 02 : Les Variables

Introduction : définitions
Syntaxe
Déclaration/Chargement et effacement des variables
Les types de données en PHP
Les changements de type
Connaître l'état ou le type d'une variable
La concaténation
L'interpolation
Remarques sur les chaînes
Les constantes
La portée des variables : variables globales
Variables statiques
Un nom de variable dans une variable
Annexe : caractères spèciaux
Notes de page

Introduction : définitions

La valeur : Une valeur est une donnée, qui peut être un mot, un nombre, ou une combinaison de chiffres et de lettres. Cette donnée sera utilisée par le programme, et peut être stockée pour un temps donné dans une variable.

La variable: Une variable est un élément de programmation que l’on nomme par un caractère ou des suites de caractères. A cet élément, on associe une valeur. Suivant les opérations faites sur l’élément, sa valeur peut changer ou être effacée. La variable est aussi utilisée pour faciliter la réutilisation d'une même valeur un grand nombre de fois.

Remarque 1: L'utilisation de la variable est incontournable en PHP, mais également dans tous les langages de programmation.

Remarque 2: Lorsqu'on associe une valeur à une variable, on dit que la variable est chargée.

Syntaxe

Une variable peut être représentée par n'importe quelle suite de caractères, du moment que ces caractères figurent dans l'une des trois plages suivantes :
On considère alors que la chaîne de caractères (ou suite de caractères) est le nom de la variable et c'est simplement avec ce nom que l'on utilise les variables dans un programme.

Remarque 1 : Une variable doit obligatoirement commencer par un caractère alphabétique ou un caractère souligné "_". Le premier caractère de la suite ne peut pas être un chiffre.

Remarque 2 : Dans un programme, le caractère « $ » est toujours placé avant la chaîne de caractères représentant une variable (c'est-à-dire devant le nom de la variable). Le $ signifie qu’il s’agit bien d’une variable et non d’une valeur ou d'un autre type d'élément.

Exemples de chaînes de caractère représentant une variable:
1)
<?php
$1var = 1; // ceci n’est pas correct !
?>
2)
<?php
$_1var = 1; // ceci est correct $_1var est la variable, 1 est la valeur. On associe 1 à $_1var à l'aide du =
?>

Rappel : tout programme débute par <?php et finit par ?>. Le signe // indique un commentaire dans le programme.

Remarque 3 : Chaque nom de variable, dans un programme, devant être précédé du caractère dollar "$", ce caractère est donc "réservé", si vous souhaitez l'utiliser dans une chaîne de caractères pour nommer une variable, vous devrez le faire précéder du signe "\" (voir exercice ci-après).

Imprimer des caractères spéciaux
(Nom du fichier : exercises_02/lesson_02_print.php)
Imprimer à l'écran un texte avec un $
(Nom du fichier : exercises_02/lesson_02_print_$.php)
Noms de variables avec des accents
(Nom du fichier : exercises_02/lesson_02_accents.php)

Déclaration/Chargement et effacement des variables

Le chargement permet d'attribuer une valeur à une variable, et en même de la déclarer, on dit dans ce cas que la déclaration de la variable est implicite. En effet, en programmation on doit "dire" que l'on a l'intention d'utiliser une variable et le type de donnée qu'elle contiendra (par exemple un entier ou une chaîne de caractères) avant de s'en servir. En PHP, le fait d'attribuer une valeur à une variable revient à déclarer celle-ci.

Si l'on utilise une variable avant de l'avoir chargée (et donc déclarée), une erreur de type "notice" va se produire et s'afficher dans le navigateur, mais cette erreur sera donnée uniquement à titre indicatif sans conséquence sur le restant du programme.
Pour charger une variable avec une valeur, on écrit une expression de la forme suivante :
$var1 = "a"$var1 désigne la variable et a désigne la valeur qui est attribuée à var1.

Exemples de chargement de plusieurs variables de types différents:
<?php
$var0 = "jean" ;
$var1 = "christophe" ;
$var3 = 5.5 ;
$var2 = $var1 ;
?>

Remarque 1: Lorsque la valeur chargée est une valeur littérale, composée de lettres et éventuellement de chiffres, elle doit être entre guillemets doubles (" "). Dans les autres cas, comme pour une valeur numérique ou une autre variable, on ne met pas de guillemets.

Remarque 2: On peut charger une variable avec la valeur d'une autre variable ($var1=$var2)

Pour effacer une variable, ou plus exactement pour effacer la valeur qu’elle représente, on utilise la fonction unset.
Voici trois exemples de l’utilisation de cette fonction :
a) effacement de la valeur de la variable var0 :
unset ($var0);
b) effacement de la valeur de la variable var1 d’un tableau :
unset ($bar[‘var1’]);
c) effacement de la valeur de plusieurs variables var1, var2, var3 :
unset ($var1, $var2, $var3);

Remarque 3: Vous en saurez plus sur les tableaux lorsque vous étudierez la
leçon 5. Sachez déjà qu'une variable peut être un tableau, ce qui veut dire qu'elle contiendra non pas une mais plusieurs valeurs.

Remarque 4: Vous devez savoir que par principe une fonction renvoie une valeur. Vous verrez cela plus en détail dans la leçon 6. La valeur renvoyée par la fonction unset() est décrite dans la documentation de PHP, si vous décidez de l'utiliser de manière approfondie, nous vous invitons à suivre le lien suivant : php.net/manual/fr/function.unset

Remarque 5: PHP est capable de vous indiquez dans le navigateur que vous n'avez pas respecté les règles de son langage. A la leçon 11 vous en saurez plus sur le sujet. L'exemple ci-après vous montre un type d'erreur à propos d'une variable qui n'a pas été déclarée (c'est à dire chargée).
Erreur notice et chargement des variables
Nom du fichier : exercises_02/lesson_02_declaration.php

Les types de variables

Voici deux tableaux, le premier présente les types de variable que vous pouvez rencontrer. Le deuxième présente les différents types de conteneur, sachant que la variable est un conteneur. On peut dire que le type de conteneur défini la manière dont sont associés les valeurs dans notre variable. Ces conteneurs seront étudiés en détail dans les leçons suivantes.

Quatre types de variable
TypeDescriptionExemple
BOOLEAN
(booléen)
Cette variable est susceptible de prendre deux valeurs s'excluant mutuellement, 0 ou 1, mais on peut aussi dire vrai (true) ou faux (false).
Remarque : Il est possible de convertir une variable qui est de type non-booléen en booléen. Une fois convertie on obtient 0 ou faux (false) dans les cas où on a au départ : 0 (entier, float ou chaîne), chaîne vide, tableau à 0 éléments, objet à 0 membres, NULL. Et une fois convertie on obtient 1 ou vrai (true) pour toutes les autres valeurs
TRUE
INTEGER
(entier)
Cette variable est associée à une valeur entière entre -2 147 483 648 et +2 147 483 648 (soit sur 31 bits + le signe)6 777 714
DOUBLE ou FLOAT
(décimal)
Cette variable est associée à une valeur décimale et sa taille dépend de la plateforme ~1.8e308, la précision est de 14 décimales7.254871368E-10
STRING
(chaîne)
Cette variable est associée à une valeur composée de caractères, le nombre de caractère est illimitéBonjour à tous

Quatre types de conteneur
TypeDescriptionExemple
SimpleN'importe quelle valeur avec les restrictions données ci-dessus $maVariable = 52.8
ARRAY
(Tableau)
Tableau, voir la leçon n°5$mois = array("octobre","novembre","décembre")
OBJET
(object)
Instantition de classes, voir la leçon n°8$maVoiture = new $car
Ressource Fichier, connexion $maConnexion = mysql_connect("monServeur", "monNom","MonPass");

Remarque 1: En PHP, le type d'une variable n'est pas déclaré de manière définitive, en effet, le type de la variable peut changer suivant son contenu, c'est à dire sa valeur. Par exemple une variable qui est chargée avec une valeur de type entier est une variable de type entier. Rappelez-vous que la déclaration de la variable se fait implicitement au moment du chargement.

Les changements de type de variable

  1. Conversion implicite :
    Le type de variable change quand le contenu change. Pour forcer le type d'une variable en texte, on met la valeur entre guillemets au moment du chargement. Dans l'exemple suivant, le type de la variable $cow change de ligne en ligne :
    Exemple 1:
    <?php $cow = "0"; // $cow est une chaine (string, ASCII 48) $cow += 2; // $cow est maintenant un entier integer (2) $cow = $cow + 1.3; // $cow est maintenant un float (3.3) $cow = 5 + "10 Little Piggies"; // attention dans ce cas $cow reste un entier (15) //Changement de type de conteneur $age = 1; // $age est un entier égal à 1 $age[0] = "f"; // $age devient un tableau, dont l'élément 0 contient f ?>
  2. Remarque 1: Le déroulement de tout programme PHP se fait du début à la fin, de ligne en ligne. Ce qui veut dire qu'ici, au cours du programme, la variable sera chargée plusieurs fois.

  3. Forcer la variable à contenir un certain type : fonction settype()
    Exemple 1:
    <?php $prix = 10; // on charge $prix avec un entier, $prix est donc de type entier $resultat=settype($prix,"float");// $prix est convertie en float, $resultat contient TRUE ou FALSE if ($resultat == TRUE) echo "Le prix a pu être converti !"; // Si la conversion à réussi on affiche le message ?>
    Rappel : echo est la fonction d'affichage

    Comme nous l'avons vu plus haut, une fonction renvoie une valeur, pour settype() cette valeur est de type bouléen (true ou false). Vous en saurez plus sur les fonctions au cours de la leçon 6. $resultat est une variable que l'on charge avec la valeur donnée par la fonction, $resultat est donc de type bouléen.

    Remarque 2: la fonction if() est utilisée pour tester si une condition est remplie, ici on veut savoir si $resultat est chargé avec la valeur true. Vous en saurez plus sur if() et les structures de contrôle à la leçon 4.

    Attention la valeur associée à la variable peut être modifiée lors de l'utilisation de cette fonction. L'exemple suivant montre cette modification.

    Exemple 2:
    <?php $pression = "5bar"; // variable de type chaîne (ou string) settype($pression, "integer"); // $pression contient maintenant 5 (integer) au lieu de "5bars" $actif = TRUE; // variable de type bouléen (ou boolean) settype($actif, "string"); // $actif devient égal à "1" (string) ?>
    Tableau récapitulatif de l'utilisation de la fonction 'settype'
    Nom du fichier : exercises_02/lesson_02_settype_1.php
    Construire un exemple sur la fonction 'settype'
    Nom du fichier : exercises_02/lesson_02_settype_2.php
    Utilisation de settype()
    Nom du fichier : exercises_02/lesson_02_settype_3.php

  4. Transférer le contenu d'une variable dans une autre variable en forçant le type : c'est le casting
    Le nom du type désiré est écrit entre parenthèses devant la variable à convertir :
    $nouvelleVariable = (Nouveau type:int, float, string...) $ancienneVariable
    Les 'castings' permis sont:
    • (int), (integer) --> conversion vers un entier
    • (bool), (boolean) --> conversion vers un booléen
    • (float), (double), (real) --> conversion vers un float
    • (string) --> conversion vers une chaine
    • (array) --> conversion vers un tableau
    • (object) --> conversion vers un object
    Exemple 1:
    <?php $intPrice = 10; // $intPrice est un entier $floatPrice = (float) $intPrice; // $floatPrice est un float // la conversion vers un string peut se faire d'une façon spéciale : $maValeur = 5 ; // $maValeur est de type entier $maChaine = "$maValeur"; //$maChaine est de type chaîne, on pouvait aussi écrire $maChaine="5" ?>
    Tableau général sur le casting
    Nom du fichier : exercises_02/lesson_02_casting_1.php
    Construire un exemple en utilisant le casting
    Nom du fichier : exercises_02/lesson_02_casting_2.php

  5. Afficher le contenu comme étant d'un type donné grâce à des fonctions spécifiques de conversion :
    (servent aussi à convertir dans un autre type, mais les autres méthodes ne permettent pas d'afficher directement la variable convertie)
    Les syntaxes permises sont les suivantes :
    • string strval ( mixed var) : Renvoie la variable var convertie en texte
    • int intval ( mixed var [, int base]): Renvoie valeur entière de var dans la base spécifiée.
    • float floatval ( mixed var) : Renvoie la variable var convertie en float
    Nb: la variable var doit être un scalaire, strval() ne peut pas être utilisé sur des tableaux ou des objets.
    Exemples:
    <?php //Conversion en entier : $a = "222,22324" $a = $a * 100; // $a a pour valeur 22222,324 $a = intval($a * 100) / 100 ; // $a a pour valeur 222,22 $a = intval(($a * 100) + 0.5) / 100; ?>
    intval convertit les doubles en entiers en supprimant la partie décimale. Ceci peut donner des résultats inattendus:
    <?php print intval ((0.1 + 0.7) * 10); ?>
    Ceci va donner 7, et non pas 8
    En convertissant un texte vers un entier, on obtient souvent 0
    <?php //Conversion en float $var = '122.34343The'; $float_value_of_var = floatval ($var); print $float_value_of_var; // affiche 122.34343 ?>
    Tableau récapitulatif des fonctions 'strval', 'intval', 'doubleval'
    Nom du fichier : exercises_02/lesson_02_conversion_functions_1.php
    Construire un exemple sur les fonctions 'strval', 'intval', 'doubleval'
    Nom du fichier : exercises_02/lesson_02_conversion_functions_2.php
En résumé :
Opération ExempleContenu de la variable
d'origine modifié?
Changer une valeur par une
valeur d'un autre type
$a=2;...$a="velo";oui
Changer la présentation du contenu$a=2;...$a="2";non
Forcer implicitement un typesetType($var,"integer");oui parfois
Casting : Transfert d'une variable dans une autre
avec changement de type
$newVar= (integer) $var ; non
Afficher comme étant d'un autre typeprint intval($var);non

Connaître le type ou l'état d'une variable :

Une variable peut avoir trois états : Pour connaître le type de donnée contenue ou l'état d'une variable, il y a deux moyens :

1_ La fonction var_dump($variable) qui renvoie le type de donnée, de conteneur, et la valeur associée à la variable :
<?php $a = array (1, 2, array ("a", "b", "c")); var_dump ($a);//voir le résultat avec l'exercice ci-après ?>
Tableau de synthèse de l'utilisation de la fonction var_dump'
Nom du fichier : exercises_02/lesson_02_var_dump_1.php
Construire un exemple en utilisant la fonction var_dump'
Nom du fichier : exercises_02/lesson_02_var_dump82.php

2_ L'utilisation d'une fonction spécifique : is_double, is_string, is_integer...

FonctionUtilisationExemple
issetDès qu'une valeur a été affectée à une variable, celle-ci devient "set"if (!isset($myVar))...
emptyPour ne pas être "empty", une variable doit contenir autre chose que 0 ou ""if (empty($myVar))...
is_numericContient une valeur numérique différente de 0 (entre " ou pas)if (is_numeric($myVar))...
is_stringPeut contenir toute sorte de caractères avec les restrictions indiquées ci-dessus (symbole $, antislash...) echo is_string($myVar)...
is_arrayIndique si la variable est de type tableauif (is_array($myVar))...
is_boolIndique si une variable est de type booléenif (is_bool($myVar))...
is_double(=is_float,=is_real)Indique si une variable est de type double ou float ou réelif (is_real($myVar))...
is_integer(=is_long,=is_int)Indique si une variable est de type entier ou longif (is_int($myVar))...
is_nullUne variable est dite de type null si:
_On lui a assigné la constante "null"
_Elle n'est pas encore "set" (aucune valeur d'assignée, provoque une erreur "notice")
_On lui a appliqué la fonction unset (provoque une erreur "notice")
if (is_null($myVar))...
is_objectIndique si une variable est de type objetif (is_object($myVar))...
is_ressourceIndique si une variable est de type ressourceif (is_ressource($myVar))...
is_scalarIndique si une variable est de type scalaire
(integer, float, string ou boolean mais pas array, object ni ressource)
if (is_scalar($myVar))...
Notes :
_ Dans le cas d'un chiffre entre guillemets, la variable est à la fois numérique et alphanumérique
_ Pour indiquer "n'est pas.." on met un ! devant la fonction : if (!isset($var)).. ce qui se traduit par : si $var n'est pas chargée ...
  1. Exemple avec la fonction « isset »: L’utilisation de « isset » permet de connaître l’état d’une variable. Dans un premier temps, on affecte une valeur aux variables var0 et var1. Puis, on utilise la fonction unset pour que var0 soit inexistante, ce qui signifie qu’aucune valeur n’est attribuée à var0 :
    <?php //ISSET: $a = "test"; $b = "anothertest"; echo isset ($a); //revoie ==> TRUE echo isset ($a, $b); //revoie ==>>TRUE unset ($a); echo isset ($a); //revoie ==> FALSE echo isset ($a, $b); //revoie ==>>FALSE Ou encore: if (!isset($a)) .... //si $a n'est pas set .... ?>
  2. Exemple avec la fonction « empty » :
    Une variable est "empty" si elle a été déclarée mais qu’elle est vide ou encore égale à 0 ou à "".
    <?php $var = $valeur; if (empty($var)) { echo '$var is soit vide soit =0'; } else { echo '$var est non chargée ou chargée avec une valeur <>0'; } if (!isset($var)) { echo '$var n'est pas set'; } ?>
Tableau récapitulatif pour l'utilisation de isset, is_int..
Nom du fichier : exercises_02/lesson_02_var_type_1.php
Application is_int, is_float
Nom du fichier : exercises_02/lesson_02_var_type_2.php
Exemple pratique sur empty, isset
Nom du fichier : exercises_02/lesson_02_var_type_3.php

La concaténation

La concaténation consiste à "recoller" ensemble plusieurs morceaux de texte.
Elle se fait par l’intermédiaire des variables.
  1. Par l'intermédiaire du point "."
    $var0="jean";
    $var1="christophe";
    $result=$var0."-".$var1 // renvoie "jean-christophe"
  2. Au sein même de la chaîne
    $result="$var0-$var1" // renvoie "jean-christophe"
Remarque : La variable « result » a maintenant pour valeur « jean-christophe »
Exercices sur la concaténation
Nom du fichier : exercises_02/lesson_02_concatenation_1.php
Concatenation du résultat d'une fonction
Nom du fichier : exercises_02/lesson_02_concatenation_2.php

L'interpolation

L'interpolation consiste à évaluer la signification d'un texte qui contient une variable. Attention, pour les mathématiciens cela n'a pas grand chose à voir avec l'interpolation en mathématiques, ici "interprétation" aurait été plus juste.
Même entre guillemets (""), PHP interprète les variables, mais pas entre guillemets simples (' ').
Exemple :
    $assiette = "du caviar";
  1. echo "Vous mangez $assiette" ;
    le programme va afficher "Vous mangez du caviar", l'interpolation se produit, le programme va aller rechercher ce que l'on a voulu dire
  2. echo 'vous mangez $assiette' ;
    il s'agit de guillemets simples et non doubles, l'interpolation ne se produit pas, le programme va renvoyer "mot pour mot" ce qui est entre guillemets simples, à savoir 'vous mangez $assiette'
Note : attention l'interpolation n'est possible que pour les variables, pas pour les noms de fonction.
Exemple sur l'interpolation et les caractères réservés
Nom du fichier : exercises_02/lesson_02_g_interpolation.php
Exemple sur l'interpolation et les fonctions
Nom du fichier : exercises_02/lesson_02_g_interpolation.php

Remarques sur les chaînes

On peut accéder facilement à un caractère à l'intérieur d'une chaîne:
<?php $myString="Il était une fois"; print $myString[4]; //renvoie t qui est le 5ième caractère (on commence à 0) ?>

Les constantes

Syntaxe:
define ("MACONSTANTE") , valeur, sensible/insensible à la casse
Exemple:
<?php define ("MAXSIZE", 100, True); echo MAXSIZE; echo constant("MAXSIZE"); ?>
Le nom des constantes est en général en majuscules.
Le troisième paramètre indique si le nom de la constante est insensible à la casse ou non.
Si la valeur vrai (true) est indiquée, alors le nom n'est pas sensible à la casse.
La valeur par defaut est 'false', c'est à dire sensible à la casse
Exemple:
<?php define ("MYCONSTANT", "Bonjour à tous"); echo MYCONSTANT; // renvoie "Bonjour à tous" echo MyConstant; // renvoie "Constant" et une erreur de type notice. // define ("GREETING", "Salut, toi !.",TRUE); echo GREETING; // renvoie "Salut, toi !." echo Greeting; // renvoie "Salut, toi !." // define ("MAXSIZE", 100); echo MAXSIZE; echo constant("MAXSIZE"); // idem ligne ci-dessus ?>
Define() renvoie TRUE en cas de succès et FALSE en cas d'erreur.
Une constante doit être définie avant d'être utilisée. "defined" sert à savoir si une constante a été définie.

La portée des variables : variables globales, variables statiques

La portée des variables est primordiale à comprendre en PHP. Car outre le fait que des variables portant le même nom au sein d'un même programme peuvent avoir des portées différentes et donc des valeurs différentes, la déclaration des variables est implicite dans le langage PHP.
LES VARIABLES DANS LES FONCTIONS :
Chaque variable utilisée dans une fonction est une variable à portée locale.
Exemple :
1_Ne fonctionne pas (pas de valeur de retour) :
<?php $a=1; // Variables à portée globale $b=2; echo somme() function somme() { // la fonction somme ne retourne pas le bon résultat $result=$a+$b; // Variable à portée locale return $result; } ?>
Exécution de l'appel de fonction ci-dessus : valeurs $a et $b inconnues dans la fonction
Nom du fichier : exercises_02/lesson_02_functions_1.php
2/ Correction de l'erreur par passage de paramètres: on passe les paramètres $a et $b à la fonction
<?php $a=1; $b=2; echo 'Passing parameters $a and $b, result is '.somme($a,$b) ; // function somme($a,$b) { // la fonction somme retourne le bon résultat $result=$a+$b; return $result; } ?>
Exécution de l'appel de fonction ci-dessus : passage de paramètres
Nom du fichier : exercises_02/lesson_02_functions_2.php
3/ Correction de l'erreur : On utilise le tableau GLOBALS
<?php $a=1; $b=2; print somme($a,$b); function somme() { // la fonction somme retourne le bon résultat $result = $GLOBALS["a"] + $GLOBALS["b"]; // Variables à portée globale return $result; } ?>
Utilisation du tableau $globals[]
Nom du fichier : exercises_02/lesson_02_globals_1.php
Déclaration des variables comme globales
Nom du fichier : exercises_02/lesson_02_globals_2.php

Variables statiques

Utilisation d'une variable statique :
Une variable déclarée "static" garde sa valeur entre deux appels de fonction
Syntaxe : static $var_name; à l'intérieur de la fonction
Exemple de fonctionnement d'une variable statique
Aller plus loin avec les variables statiques:
Exercice niveau 2 : Un écran en papier listing
Nom du fichier : exercises_02/lesson_02_d.php

Les 'variables de variables'

On peut mettre le nom d'une variable dans une autre variable , cela donne un nouveau nom de variable commençant pas deux $ :
si $prénom = "Alfred" et $Alfred = "Martin" , alors : $$prénom = "Martin" , on a ainsi accès au nom et au prénom avec le même nom de variable, ce qui peut être parfois pratique.
Construire un exemple de variable de variable
Nom du fichier : exercises_02/lesson_02_var_of_var_1.php
Un autre exemple de variable de variable
Nom du fichier : exercises_02/lesson_02_var_of_var_2.php

Annexe : Caractères spéciaux

Note concernant l'utilisation de caractères particuliers dans les chaînes de caractères:
De façon générale voici la liste des caractères réservés qui, précédés du signe "\" dans une chaîne de caractères, ont une signification particulière :
SéquenceValeur
\nNouvelle ligne (linefeed, LF ou 0x0A en ASCII)
\rRetour à la ligne(carriage return, CR ou 0x0D en ASCII)
\tTabulation horizontale (HT ou 0x09 en ASCII)
\\Antislash
\$Caractère $
\"Guillemet double
\[0-7]{1,3}Une séquence de caractère qui permet d'afficher un nombre en notation octale.
\[0-9A-Fa-f]{1,2}Une séquence de caractère qui permet d'afficher un nombre en notation hexadécimale.

Utilité du \n
(Nom du fichier : exercises_02/lesson_02_antislash.php)


Tous droits réservés. 2005-2020