Chapitre 6 : Les structures de contrôles
Nous entrons dans un chapitre très important du PHP : les structures de contrôles.
Vous les utiliserez dans normalement tous vos scripts.
Elles sont utilisées par tous les langages de programmation.
A partir de ce chapitre vous pourrez commencer à créer de petits scripts.
Tout d'abord, qu'est-ce qu'une structure de contrôles :
Tous les scripts PHP sont une suite d'instructions.
Un instruction, en général, se termine par un point-virgule ( ;), sauf les boucles qui sont des instructions spéciales mais très importantes.
Une instruction peut être une assignation, un appel de fonction, une instruction vide (qui ne fait rien) mais en général ce sont des instructions conditionnelles.
Un petit tableau regroupant les instructions les plus utilisées :
| VALIDE |
EXPLICATION |
| if |
si |
| else |
Sinon |
| elseif |
Sinon si |
| switch |
Selon |
| while |
Tant que (boucle) |
| do ... while |
fait ceci ... tant que |
| for |
Pour (boucle) |
| foreach |
Pour chaque |
Je vais vous expliquer à quoi elles servent et comment les utiliser.
L'instruction « if » :
L'instruction
if est une des plus importantes instructions de tous les langages, PHP inclus.
Elle permet d'exécuter du code si une ou plusieurs conditions sont respectées.
Sa syntaxe est :
CODE PHP
if (expression) {
commandes
}
L'expression entre parenthèse est évaluée : si l'expression est vraie (true), PHP exécutera les commandes en crochets.
Si elle fausse (false) l'instruction sera ignorée.
Voici un exemple :
CODE PHP
<?php
$a = 3;
$b = 1;
if ($a > $b) {
echo "$a est plus grand que $b";
}
//Dans ce cas là, le code entre crochets sera executé car l'expression $a > $b est TRUE
?>
CODE PHP
<?php
$a = 5;
$b = 9;
if ($a > $b) {
echo("$a est plus grand que $b");
}
//Dans ce cas là, le code entre crochets sera ignoré car l'expression $a > $b est FALSE
?>
L'instruction « else » :
Souvent, vous voulez aussi exécuter une instruction si la condition
if est FALSE.
C'est ici qu'intervient else.
Sa syntaxe est :
CODE PHP
else {
commandes
}
Inutile de préciser que else fonctionne forcément avec if.
CODE PHP
if (expression) {
commandes
} else {
commandes
}
Si l'expression du
if est FALSE et si elle n'est pas suivi par l'expression
elseif, alors les commandes du
else sont exécutées.
Exemple :
CODE PHP
<?php
$a = 5;
$b = 9;
if ($a > $b) {
echo "$a est plus grand que $b";
} else {
echo "$b est plus grand que $a";
}
/*Dans ce cas là, le code entre crochets du else sera executé car l'expression $a > $b est FALSE*/
?>
L'instruction « elseif » :
elseif est une combinaison de
if et
else.
Comme
else , il permet d'exécuter une instruction après un
if dont l'expression a été évaluée comme FALSE.
Mais cette instruction n'est exécutée que si l'expression entre parenthèse est TRUE. C'est la différence de
else.
Sa syntaxe est :
CODE PHP
elseif (expression) { commande }
Voici un exemple
CODE PHP
<?php
$fruit = "pomme";
if ($fruit == "poire") {
echo "Le fruit est une poire";
} elseif ($fruit == "pomme") {
echo "Le fruit est une pomme";
} else {
echo "C'est un fruit mais pas une pomme ni une poire";
}
/*Le fruit est une pomme sera affiché à l'écran car l'expression de elseif est TRUE et celle de if est FALSE.*/
?>
L'instruction « switch » :
L'instruction switch est une série d'instructions if.
Souvent vous aurez besoin de faire de nombreuses comparaisons de valeurs pour une même variable, c'est à sa que sert l'instruction switch .
Car au lieu d'utiliser d'innombrables if , on utilisera un switch avec plusieurs case .
Sa syntaxe est :
CODE PHP
<?php
switch (variable) {
case valeur :
commandes
break;
}
?>
Exemple en utilisant
if :
CODE PHP
<?php
$nb = 3;
if($nb == 0) {
echo "nb est égal à 0";
}
if($nb == 1) {
echo "nb est égal à 1";
}
if($nb == 2) {
echo("nb est égal à 2");
}
if($nb == 3) {
echo("nb est égal à 3");
}
if($nb == 4) {
echo("nb est égal à 4");
}
if($nb == 5) {
echo("nb est égal à 5");
}
?>
Vous comprenez qu'il devient dur d'utiliser des
if pour tester de nombreuses valeurs.
Exemple en utilisant
switch :
CODE PHP
<?php
$nb = 3;
swith($nb) {
case 0:
echo "nb est égal à 0";
break;
case 1:
echo "nb est égal à 1";
break;
case 2:
echo "nb est égal à 2";
break;
case 3:
echo "nb est égal à 3";
break;
case 4:
echo "nb est égal à 4";
break;
case 5:
echo "nb est égal à 5";
break;
}
?>
Il est beaucoup plus facile dans ce cas là d'utiliser
switch .
N'oubliez pas
break; sinon PHP continuera a exécuter tout le bloc de
switch . Par exemple PHP exécutera la case 4 et 5 même si
$nb est égal à 3.
break est aussi une instruction de contrôle (un instruction de controle d'arrêt)
L'exemple ci-dessus nous explique l'utilisation de switch, cependant nous l'utilisont avec de simple chiffre, en terme de lignes de code ce n'est pas si différent que if et elseif et else.
Cependant imaginons que nous utilisions switch avec des fonctions plutot. imaginez avoir 100 fonctions à rédiger les unes derrière les autres à la "volée", l'appel / l'affichage de la fonction désirée se fera simplement avec switch. On gagne en lisibilité du code plutot que d'inombrable if et elseif et else imbriqués.
CODE PHP
<?php
// $var peux être défini par $_GET[] ou par $_POST[] par exemple
swith($var) {
case fonction1:
fonction1();
break;
case fonction2:
fonction2();
break;
case fonction3:
fonction3();
break;
?>
Dans le cadre d'un switch il peut être intéressant de definir un élement par defaut si aucune des condition (case) n'est vraie
Dans ce cas nous ajoutons
default définit comme ceci.
CODE PHP
default:
echo "Ceci est un élement par défaut d'un switch";
break;
Les boucles :
Une boucle, comme son nom l'indique, permet d'exécuter du code en boucle tant qu'une est expression est TRUE.
L'instruction « while » :
Sa syntaxe est :
CODE PHP
while (expression) {
commandes }
Les commandes seront exécutées tant que l'expression sera évaluée TRUE.
Un petit exemple :
CODE PHP
<?php
$i = 0;
// Tant que $i est inférieur ou égale à 5
while ($i <= 5){ //le code ci-dessous sera executé tant que $i est inférieur ou égal à 5
echo "$i";
$i++; // On incrémente $i de 1 sinon on ne sortira jamais de la boucle
// Affiche $i puis l'incrémente de 1 (cf. cours sur les opérateurs)
// Affiche donc à l'écran 012345
}
?>
L'instruction « for » :
En vulgarisant les boucles for on pourrais dire que ce sont des espèces de condensé de while en une seule ligne.
Dans la plupart des langages de programmation for() est utilisé pour parcourir un tableau, PHP lui utilise foreach pour effectuer cela (foreach plus bas)
Sa syntaxe est :
CODE PHP
for (expression1 ; expression2 ; expression3) {
commandes
}
L'expression1 est évaluée quoi qu'il arrive au début de la boucle. c'est la déclaration d'une variable qui nous servira pour la boucle ($i = 0)
L'expression2 est évaluée. Si elle vaut TRUE, la boucle continue et l'instruction est exécutée.
Si elle vaut FALSE, la boucle s'arrête.
A la fin de chaque itération(chaque fois que PHP exécute l'instruction on appelle ça une itération) l'expression3 est évaluée.
Voici un exemple
CODE PHP
for ($i = 0 ; $i <= 5 ; $i++) // Instruction 1, Instruction 2, Instruction 3
{
echo "$i";
}
// La même chose avec while
$i = 0 // Instruction 1
while ($i <= 5) // Instruction 2
{
echo "$i";
$i++; // Instruction 3
}
?>
L'instruction « foreach » :
foreach est une structure de controle servant à parcourir un tableau array() (Voir cours sur les tableaux en PHP)
foreach est une boucle qui avance son pointeur à chaque itération.
Elle a pour syntaxe (2 méthodes selon le tableau parcouru)
CODE PHP
<?php
foreach($leTableau as $valeur)
{
echo "$valeur <br/>";
}
// Affichage des couples clé / valeur
foreach($leTableau as $cle => $valeur)
{
echo "$cle a pour valeur $valeur <br/>";
}
?>
Pour comprendre cette boucle définissons deux tableaux PHP (un tableau numérique et un tableau associatif)
CODE PHP
<?php
// Tableau numérique
$fruit = array('pomme','poire','kiwi','orange','banane');
// Tableau associatif
$couleur = array('rouge'=>'#ff0000','vert'=>'#00ff00','bleu'=>'#0000ff');
// Affichage des fruits
foreach($fruit as $aliment) // $fruit est le tableau, $aliment est chaque valeur de $fruit
{
echo "$aliment <br/>";
}
/* Affichage des couleurs
$couleur est le tableau, $nom chaque entrée de $couleur et $code_hexa la valeur associée à $nom */
foreach($couleur as $nom => $code_hexa)
{
echo "$nom à comme code hexadécimal $code_hexa <br/>";
}
?>
L'instruction « break » :
L'instruction break permet de sortir d'une structure for, foreach, while, do-while ou switch.
break accepte un argument numérique optionnel qui vous indiquera combien de structures emboîtées doivent être interrompues.
CODE PHP
<?php
/* Exemple repris de la doc PHP officielle */
$arr = array('un', 'deux', 'trois', 'quatre', 'stop', 'cinq');
while (list(, $val) = each($arr)) {
if ($val == 'stop') {
break; /* Vous pourriez aussi utiliser 'break 1;' ici. */
}
echo "$val
n";
}
/* Utilisation de l'argument optionnel. */
$i = 0;
while (++$i) {
switch ($i) {
case 5:
echo "At 5
n";
break 1; /* Termine uniquement le switch. */
case 10:
echo "At 10; quitting
n";
break 2; /* Termine le switch et la boucle while. */
default:
break;
}
}
?>
L'instruction « continue » :
L'instruction continue est utilisée dans une boucle afin d'éluder les instructions de l'itération courante et de continuer l'exécution à la condition de l'évaluation et donc, de commencer la prochaine itération.
CODE PHP
<?php
for ($i = 0; $i < 5; ++$i) {
if ($i == 2)
continue;
echo "$i ";
}
// Affichera à l'écran -> 0134
/* Comme expliqué plus haut si $i est égal à 2 il passe l'instruction
de l'itération courante et passe à la suivante */
?>
L'opérateur ternaire
Il permet d'assigner une valeur par défaut.
L'expression (expr1) ? (expr2) : (expr3) est évaluée à expr2 si expr1 est évalué à TRUE , et expr3 si expr1 est évalué à FALSE.
CODE PHP
<?php
// Exemple d'utilisation
$action = (empty($_POST['action'])) ? 'défaut' : $_POST['action'];
// La ligne ci-dessus est identique à la condition suivante :
if (empty($_POST['action'])) {
$action = 'défaut';
} else {
$action = $_POST['action'];
}
?>
L'opérateur « goto » :
L'opérateur goto peut être utilisé pour continuer l'exécution du script à un autre point du programme. La cible est spécifiée par un label, suivi de deux-point, et l'instruction goto est ensuite suivi de ce label. goto n'est pas totalement sans limitations. L'étiquette cible doit être dans le même contexte et fichier, ce qui signifie qu'il n'est pas possible de changer de méthode ou de fonction, ni de se rendre dans une autre fonction. Vous pouvez sortir d'une fonction, et l'utilisation courante est alors de se servir de goto comme un break.
CODE PHP
<?php
// Affiche à l'écran -> Bar
goto a;
echo 'Foo'; // Sera ignoré car avant nous avons un goto a;
a:
echo 'Bar';
?>
CODE PHP
<?php
// Affiche à l'écran uniquement -> J vaut 60
for($i=0,$j=50; $i<100; $i++) {
while($j++) {
if($j==60) goto end;
}
}
echo "i = $i"; // sera ignoré car la sortie de boucle se fait à cause de goto end;
end:
echo 'J vaut 60';
?>
Syntaxe alternative
PHP propose une autre manière de rassembler des instructions à l'intérieur d'un bloc, pour les fonctions de contrôle if, while, for, foreach et switch. Dans chaque cas, le principe est de remplacer l'accolade d'ouverture par deux points (:) et l'accolade de fermeture par respectivement: endif;, endwhile;, endfor;, endforeach;, ou endswitch;.
CODE PHP
<?php
if ($a == 5):
echo "a égal 5";
echo "...";
elseif ($a == 6):
echo "a égal 6";
echo "!!!";
else:
echo "a ne vaut ni 5 ni 6";
endif;
?>