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.

Remarque 3: Nous verrons dans les leçons suivantes la notion de tableaux, d'objets et de ressources. Sachez simplement qu'une variable peut aussi être associée à un de ces éléments même si vous ne les connaissez pas encore.

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.

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.

Exemples de chaînes de caractère représentant une variable:
1)
<?php
$1var=1; // n’est pas correct
?>
2)
<?php
$_1var=1; // 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 dollars "$", 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’]);
Mais vous en saurez plus sur les tableaux, lorsque vous étudierez la
leçon 5
c) effacement de la valeur de plusieurs variables var1, var2, var3 :
unset ($var1, $var2, $var3);

Remarque 3: 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 4: 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 valeurs

Voici deux tableaux, le premier tableau présente les types de valeur que vous pouvez rencontrer. Le deuxième présente les différents type 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 contneurs seront étudiés en détail dans les leçons suivantes.

Quatre types de valeurs

Type de valeurDescriptionExemple
BOOLEAN (PHP4)Booléen : Les valeurs qui, une fois converties en booléen donnent "FALSE" sont les suivantes : 0 (entier, float ou chaine),chaine vide, tableau à 0 éléments, objet à 0 membres, NULL. Toutes les autres valeurs donnent TRUE lors de la conversion vers le type BooléenTRUE FALSE
DOUBLE (FLOAT en PHP4) Décimaux : La taille dépend de la plateforme ~1.8e308
avec une précision 14 décimales
7E-10
INTEGER Entiers (sur 31 bits + le signe : 2 147 483 648)67777
STRING Chaînes de caractères, taille illimitéeBonjour à tous
Quatre types de conteneur

Type de conteneurDescriptionExemple
Variable simpleN'importe quelle valeur avec les restrictions données ci-dessus $maVariable = 52.8
Tableau (ARRAY)Tableaux , voir leçon N° 5$mois[10] = "octobre"
Objet (OBJECT) Instantition de classes, voir leçon N° 8$maVoiture = new $car
Ressource Fichiers, connexions $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 ou à 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é 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é lors de l'utilisation de cette fonction. L'exemple suivant montre cet 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ées contenues ou l'état d'une variable, deux moyens :
1_ La fonction var_dump($variable) renvoie le type de donnée et 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_ Utilisation de fonctions spécifiques : 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 0if (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 un 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 resource )
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 : if (!isset($var)).. =>> si $var n'est pas set ...
  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 deux valeurs aux variables var0 et var1. Puis dans un deuxième temps, on applique la fonction « unset » à var0 pour que son état ne soit pas « set », 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.
    <?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 "."
    $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 oncaté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 : évaluer la signification d'un texte non par rapport à ce qui est vraiment écrit, mais par rapport à ce que l'on pense que l'auteur a voulu écrire (le contraire de "à la lettre"). Pour les mathématiciens cela n'a pas grand chose à voir avec l'interpolation en mathématiques ,"interprétation" aurait sans doute été plus juste :
Même entre guillemets (""), PHP interprète les variables , mais pas entre guillemets simples (' '). Simplement, si l'on fait :
$assiette = "du caviar";
puis
  1. echo "Vous mangez $assiette" ;
    le programme va afficher "Vous mangez du caviar" , on va dire que l'interpolation se produit, le programme va aller rechercher ce que l'on a voulu dire (là encore c'est spécifique à PHP)
    ou
  2. echo 'vous mangez $assiette' ;
    vu que ce sont des guillemets simples et non doubles, l'interpolation ne se produit plus, c'est à dire le programme va renvoyer "mot pour mot" ce qui est entre guillemets, à savoir 'vous mangez $assiette'
    Note : attention l'interpolation n'est possible que pour les variables, pas pour les noms de fonction quels qu'ils soient
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-2008