Ce chapitre présente 2 principes importants à assimiler : les condititions et les boucles. Ce premier concept est particulièrement important puisqu'il permet d'effectuer une série d'actions en fonction des conditions que l'on teste. Quant au second, il permet de répéter N fois une série d'actions, et ce dans des temps très courts (à l'échelle humaine). L'intérêt de l'arrivée de l'informatique est de pouvoir faciliter la vie des utilisateurs en exécutant des tâches que ces derniers ne peuvent remplir. Si l'on demande à une personne de compter de 0 jusqu'à 1 000, il lui faudra plusieurs minutes tandis qu'un ordinateur traitera cette opération en quelques millisecondes (voire quelques nanosecondes selon sa puissance de calcul). On comprend alors tout de suite les atouts de l'informatique.
Une structure conditionnelle permet d'exécuter ou non une série d'instructions en fonction d'une condition d'origine (appellée aussi expression ou prédicat). Si le calcul de cette condition retourne TRUE alors le bloc d'instructions concerné est exécuté. Les expressions évaluées peuvent être plus ou moins complexes, c'est à dire qu'elles peuvent être constituées d'une combinaison d'opérateurs de comparaison, d'opérateurs logiques et même de fonctions.
Le langage PHP introduit 4 constructions conditionnelles : if, elseif, else et switch.
C'est la plus connue de toutes car on la retrouve dans tous les langages de programmation. Elle permet d'exécuter un bloc d'instructions uniquement si l'expression est vraie. Le mot clé if() signifie en anglais si. Sa syntaxe est la suivante :
Principe de fonctionnement de l'instruction if()
if(expression)
{
bloc d'instructions;
}
Illustrons son fonctionnement avec un exemple simple.
Exemple d'utilisation de l'instruction if()
<?php
// Déclaration d'une variable
$vitesse = 60;
// On teste la valeur de la variable
if($vitesse > 50)
{
echo 'Je perds 1 point pour excès de vitesse !';
echo 'Le policier me dit : "Roulez doucement maintenant !"';
}
?>
Le code ci-dessus modélise la vitesse d'un véhicule par une variable $vitesse. La condition quant à elle vérifie la vitesse du véhicule. Si cette valeur dépasse les 50 (Km/h), alors le conducteur est arrêté par les forces de l'ordre et perd un point sur son permis de conduire. Si sa vitesse est inférieure ou égale à 50 alors rien ne se passe car le conducteur n'est pas en infraction.
La clause else (traduire par sinon), ajoutée après l'accolade fermante du bloc if(), permet de définir une série d'instructions qui seront exécutées si l'expression testée est fausse (renvoie FALSE). Reprenons notre exemple précédent pour illustrer son fonctionnement.
Utilisation de la clause else dans notre exemple précédent
<?php
// Déclaration d'une variable
$vitesse = 40;
// On teste la valeur de la variable
if($vitesse > 50)
{
echo 'Les policiers m\'arrêtent !';
echo 'Je perds 1 point pour excès de vitesse !';
echo 'Le policier me dit : "Roulez doucement maintenant !"';
}
else
{
echo 'Les policiers me laissent suivre ma route !';
}
?>
Nous avons ajouté la clause else dans notre code et actualisé la valeur de la variable $vitesse (40 Km/h). Lorsque l'on exécute ce code, la condition n'est pas franchie puisque 40 n'est pas supérieur à 50 donc on entre dans la clause else et on exécute la seule instruction echo().
Elle peut se traduire par « ou si ». Cette instruction se place obligatoirement après l'accolade fermante d'un bloc if(). Elle permet notamment d'éviter une imbrication de blocs conditionnels if() et il est possible d'en cumuler plusieurs. Aggrémentons encore notre exemple avec cette instruction conditionnelle.
Exemple d'utilisation de l'instruction conditionnelle elseif()
<?php
// Déclaration d'une variable
$vitesse = 82;
// On teste la valeur de la variable
if($vitesse > 50 && $vitesse < 70)
{
echo 'Les policiers m\'arrêtent !';
echo 'Je perds 1 point pour excès de vitesse !';
echo 'Le policier me dit : "Roulez doucement maintenant !"';
}
elseif($vitesse > 70 && $vitesse < 80)
{
echo 'Les policiers m\'arrêtent !';
echo 'Je perds 2 points pour excès de vitesse !';
echo 'Le policier me verbalise par une amende';
}
elseif($vitesse > 80 && $vitesse < 90)
{
echo 'Les policiers m\'arrêtent !';
echo 'Je perds 3 points pour excès de vitesse !';
echo 'Le policier me verbalise par une grosse amende !"';
}
elseif($vitesse > 90)
{
echo 'Les policiers m\'arrêtent !';
echo 'Je perds 4 points pour excès de vitesse !';
echo 'Le policier me retire mon permis !';
echo 'Je finis à pied !';
}
else
{
echo 'Les policiers me laissent suivre ma route !';
}
?>
Dans cet exemple, nous simulons la perte de points sur le permis de conduire en fonction de la vitesse. La vitesse maximale autorisée est toujours de 50 Km/h. Nous roulons à 82 Km/h, soit 32 Km/h de plus que la vitesse maximale autorisée. Nous allons donc entrer dans le second bloc d'instruction elseif() car 82 est compris entre 80 et 89 (90 exclus). Nous perdons alors 3 points sur notre permis de conduire et l'on récupère aussi une amende à payer.
D'un point de vue interprétation, PHP va tester une à une les conditions. Si la première est fausse, il passe à la seconde. Si la seconde est fausse, il passe à la troisième et ainsi de suite. S'il en rencontre une de vraie, alors il entre dedans et exécute le bloc d'instructions. Si aucune n'est vraie, il finit par exécuté le bloc d'instructions de la clause else.
Note : dans le cas où nous n'avons qu'une seule instruction à executer par instruction conditionnelle, nous pouvons nous passer des accolades. Ainsi, nous écrirons par exemple :
Exemple d'utilisation des écritures d'instructions sur une seule ligne
<?php
// Déclaration d'une variable
$vitesse = 82;
// On teste la valeur de la variable
if($vitesse > 50 && $vitesse < 70)
echo 'Je perds 1 point pour excès de vitesse !';
elseif($vitesse > 70 && $vitesse < 80)
echo 'Je perds 2 points pour excès de vitesse !';
elseif($vitesse > 80 && $vitesse < 90)
echo 'Je perds 3 points pour excès de vitesse !';
elseif($vitesse > 90)
echo 'Je perds 4 points pour excès de vitesse !';
else
echo 'Je fais des appels de phares aux automobilistes !';
?>
Néanmoins, nous vous recommandons toujours d'utiliser les accolades qui rendent la relecture du code plus aisée.
Il existe une autre alternative à la structure if() / elseif() / else ou bien aux imbrications de blocs if(). Elle se nomme switch() (traduire par au cas où). Cette instruction conditionnelle permet de tester toutes les valeurs possibles que peut prendre une variable. Voici sa syntaxe.
Syntaxe de l'instruction conditionnelle switch()
switch(expression)
{
case valeur1 :
instructions;
break;
case valeur2 :
instructions;
break;
default :
instructions;
break;
}
Illustrons son utilisation avec un nouvel exemple. Le précédent n'étant pas adapté. Nous allons modélisé un jeu vidéo. Le joueur doit choisir son personnage (avatar).
Exemple d'utilisation de l'instruction conditionnelle switch()
<?php
// Le joueur a choisi son personnage ('elfe')
$personnage = 'elfe';
// Test de la valeur du personnage
switch($personnage)
{
case 'sorcier' :
echo 'Vous avez choisi le sorcier !';
echo 'Vous disposez de pouvoirs magiques.';
break;
case 'guerrier' :
echo 'Vous avez choisi le guerrier !';
echo 'Vous disposez d\'armes blanches.';
break;
case 'roi' :
echo 'Vous avez choisi le roi !';
echo 'Vous vivez dans un château entouré de gardes.';
break;
case 'elfe' :
echo 'Vous avez choisi l\'elfe !';
echo 'Vous pouvez voler et vous déplacer rapidement.';
break;
case 'ogre' :
echo 'Vous avez choisi l\'ogre !';
echo 'Vous avez beaucoup de force dans les bras.';
break;
default :
echo 'Veuillez choisir votre personnage svp !';
break;
}
?>
Si la variable a une valeur non définie dans le switch(), alors un bloc default lance une suite d'instructions. Le mot-clé case définit la valeur à tester. Cette valeur succède ce mot-clé. Le mot-clé break, quant à lui, permet de sortir du bloc switch() si l'on a exécuté un bloc d'instructions. Il est facultatif mais vivement conseillé dans la majorité des cas d'utilisation.
Il est également recommandé de toujours prévoir un bloc default pour s'assurer que l'on ait une action par défaut si la valeur de la variable n'est pas référencée dans le switch(). Cela pourrait vous éviter bien des surprises.
Ce cours nous a permis d'apprendre à utiliser les principales instructions conditionnelles utiles en programmation PHP. Il s'agit des blocs d'instruction if(), elseif(), else et switch(). PHP inclut également d'autres structures de contrôle qui sont les boucles. Nous les étudierons dans le chapitre suivant.