Chapitre III : Les instructions de contrôle
[Oct 2016]
I.
Introduction
Tous les scripts PHP sont une suite d'instructions. Une instruction peut être un
assignement, un appel de fonction, une instruction conditionnelle ou bien une instruction
qui ne fait rien (une instruction vide). Une instruction se termine habituellement par un
point-virgule (";"). De plus, plusieurs instructions peuvent être regroupées en bloc,
délimité par des accolades ("{}"). Un bloc est considéré comme une instruction. Les
différents types d'instructions sont décrits dans ce chapitre.
II. Structures conditionnelles
Une instruction conditionnelle est une instruction qui permet l’exécution d’une ou
plusieurs autres instructions spécifiées selon le résultat d’une condition établie.
Il faut remarquer qu’une instruction conditionnelle peut englober une autre et sont alors
appelées des instructions conditionnelles imbriquées.
if( ... ) {
…
} elseif {
…
} else {
…
}
1. if
L'instruction if est une des plus importantes instructions de tous les langages, PHP inclus.
Elle permet l'exécution conditionnelle d'une partie de code. Les fonctionnalités de
l'instruction if sont les même en PHP qu'en C :
if (expr)
instructions
PHP exécutera l'instruction si elle est TRUE sinon l'instruction sera ignorée.
Exemple :
if ($a > $b)
// affiche la phrase a est plus grand que b si $a est plus grand que $b
print "a est plus grand que b";
Souvent, vous voulez que plusieurs instructions soient exécutées après un branchement
l'instruction
conditionnel. Bien évidemment,
conditionnelle autant de fois que vous avez d'instructions à exécuter. A la place, vous
pouvez rassembler toutes les instructions dans un bloc.
Exemple :
il n'est pas obligatoire de répéter
if ($a > $b) {
print "a est plus grand que b";
$b = $a;
}
// affiche $a est plus grand que $b, et assigne la valeur de la variable $a à la variable $b
Vous pouvez imbriquer indéfiniment des instructions "if" les unes dans les autres, ce qui
permet une grande flexibilité dans l'exécution d'une partie de code suivant un grand
nombre de conditions.
1 Enseignants : Ouali Mohamed et Hedhli Houssem ISET de Bizerte
Classes : DSI2 Matière : Pgt côté serveur
Chapitre III : Les instructions de contrôle
[Oct 2016]
2. else
Souvent, vous voulez exécuter une instruction si une condition est remplie, et une autre
instruction si cette condition n'est pas remplie. C'est à cela que sert else. else fonctionne
après un if et exécute les instructions correspondantes au cas ou l'expression du if est
FALSE.
Exemple :
if ($a > $b) {
Publicité
print "a est plus grand que b";
} else {
print "a est plus petit que b";
}
// affiche a est plus grand que b si la variable $a est plus grande que la variable $b, et a est
plus petit que b sinon
Les instructions après le else ne sont exécutées que si l'expression du if est FALSE, et si
elle n'est pas suivi par l'expression elseif.
3. elseif
elseif, comme son nom l'indique, est une combinaison de if et de else. Comme l'expression
else, il permet d'exécuter une instruction après un if dans le cas où le "premier" if est
évalué comme FALSE. Mais, à la différence de l'expression else, il n'exécutera
l'instruction que si l'expression conditionnelle elseif est évaluée comme TRUE.
Exemple :
if ($a > $b) {
print "a est plus grand que b";
} elseif ($a == $b) {
print "a est égal à b";
} else {
print "a est plus petit que b";
}
// affiche a est plus grand que b, a est égal à b ou a est plus petit que b
L'expression elseif est exécutée seulement si le if précédent et tout autre elseif précédent
est évalués comme FALSE, et que votre elseif est évaluée à TRUE.
4. if(): ... endif;
Le PHP propose une manière différente de rassembler des instructions à l'intérieur d'un if.
C'est le moyen le plus simple d'inclure des blocs de code HTML à l'intérieur d'un if, mais
il peut être utilisé dans n'importe quel contexte. Au lieu d'utiliser des accolades, vous
pouvez utiliser la forme suivante: if ( expr ) suivit de deux points (:), d'une ou plusieurs
instructions, le tout finissant par un endif;.
Exemple :
<?php $a=5 ?>
<?php if ($a==5): ?>
A = 5
<?php endif; ?>
2 Enseignants : Ouali Mohamed et Hedhli Houssem ISET de Bizerte
Classes : DSI2 Matière : Pgt côté serveur
Chapitre III : Les instructions de contrôle
[Oct 2016]
Dans l'exemple ci-desssus, le block HTML "A = 5" est inclus à l'intérieur d'un if en
utilisant cette nouvelle syntaxe. Ce code HTML ne sera affiché que si la variable $a est
égale à 5.
Cette autre syntaxe fonctionne aussi avec le else et elseif.
L'exemple suivant montre une structure avec un if, un elseif et un else utilisant cette autre
syntaxe:
if ($a == 5):
print "a est égal à 5";
print "...";
elseif ($a == 6):
print "a est égal à 6";
print "!!!";
else:
print "a n’est ni 5 ni 6";
endif;
5. switch
L'instruction switch équivaut à une série d'instructions if. Dans de nombreuses occasion,
vous aurez besoin de comparer la même variable (ou expression) avec un grand nombre de
valeur différentes, et d'exécuter différentes parties de code suivant la valeur à laquelle elle
est égale. C'est exactement à cela que sert l'instruction switch.
Publicité
Les deux exemples suivants sont deux manières différentes d'écrire la même chose, l'une
en utilisant une série de if, et l'autre en utilisant l'instruction switch :
/ exemple 1 /
if ($i == 0) {
print "i égal 0"; }
if ($i == 1) {
print "i égal 1";
}
if ($i == 2) {
print "i égal 2"; }
/ exemple 2 /
switch ($i) {
case 0:
print "i égal 0";
break;
case 1:
print "i égal 1";
break;
case 2:
print "i égal 2";
break;
}
Il est important de comprendre que l'instruction switch exécute chacune des clauses dans
l'ordre. L'instruction switch est exécutée ligne par ligne. Au début, aucun code n’est
exécuté. Seulement lorsqu’une case est vérifiée, PHP exécute alors les instructions
correspondantes. PHP continue d'exécuter les instructions jusqu'à la fin du bloc
d'instructions du switch block, ou bien dès qu'il trouve l'instruction break. Si vous ne
pouvez pas utiliser l'instruction break à la fin de l'instruction case, PHP continuera à
exécuter toutes les instructions qui suivent.
/ exemple 3 /
switch ($i) {
case 0:
print "i égal 0";
3 Enseignants : Ouali Mohamed et Hedhli Houssem ISET de Bizerte
Classes : DSI2 Matière : Pgt côté serveur
Chapitre III : Les instructions de contrôle
[Oct 2016]
case 1:
print "i égal 1";
case 2:
print "i égal 2";
}
Dans cet exemple, si $i est égal à 0, PHP va exécuter quand même toutes les instructions
qui suivent. Si $i est égal à 1, PHP exécutera les deux dernières instructions. Et seulement
si $i est égal à, vous obtiendrez le résultat escompté, c'est-à-dire, l'affiche de "i égal 2.
Donc, l'important est de ne pas oublier l'instruction break.
Un "case" spécial est "default". Ce cas correspond à tous les cas qui ne fonctionnent pas
cités précédemment. Par exemple :
/ exemple 4 /
switch ($i) {
case 0:
print "i égal 0";
break;
case 1:
print "i égal 1";
break;
case 2:
print "i égal 2";
break;
Publicité
default:
print "i n'est pas égal à 0, 1 ou 2";
}
Une autre chose à mentionner est que l'instruction case ne peut être appliquée qu’à une
expression de type scalaire, c'est-à-dire nombre entier, nombre à virgule flottante; et
chaîne de caractère. Les tableaux sont sans intérêt dans ce contexte-là.
III. Structures itératives (de boucles)
1. for
Les boucles for sont les boucles les plus complexes en PHP. Elle fonctionne comme les
boucles for du langage C. La syntaxe des boucles for est la suivante:
for (expr1; expr2; expr3) instruction
La première expression ( expr1 ) est évaluée (exécutée) quoi qu'il arrive au début de la
boucle.
Au début de chaque itération, l'expression expr2 est évaluée. Si l'évaluation vaut TRUE, la
boucle continue et l'instruction est exécutée. Si l'évaluation vaut FALSE, l'exécution de la
boucle s'arrête.
A la fin de chaque itération, l'expression expr3 est évaluée (exécutée).
Les expressions peuvent éventuellement laissées vide. Si l'expression expr2 est laissée
vide, cela signifie que c'est une boucle infinie (PHP comprend implicitement qu'elle vaut
4 Enseignants : Ouali Mohamed et Hedhli Houssem ISET de Bizerte
Classes : DSI2 Matière : Pgt côté serveur
Chapitre III : Les instructions de contrôle
[Oct 2016]
TRUE, comme en C). Cela n'ait pas vraiment très utile, à moins que vous souhaitiez
terminer votre boucle par l'instruction conditionnelle break.
Considérons les exemples suivants. Tous affichent les chiffres de 1 à 10:
/ exemple 1 /
for ($i = 1; $i <= 10; $i++) {
print $i;
}
/ exemple 2 /
for ($i = 1;;$i++) {
if ($i > 10) {
break;
}
print $i;
}
/ exemple 3 /
$i = 1;
for (;;) {
}
if ($i > 10) {
break;
print $i;
$i++;
}
/ exemple 4 /
for ($i = 1; $i <= 10; print $i, $i++) ;
PHP supporte aussi la syntaxe alternative suivante pour les boucles for :
for (expr1; expr2; expr3): instruction; ...; endfor;
2. while
La boucle while est le moyen le plus simple d'implémenter une boucle en PHP. Cette
boucle se comporte de la même manière qu'en C. L'exemple le plus simple d'une boucle
while est le suivant :
while (expr) instruction
La signification d'une boucle while est très simple. Le PHP exécute l'instruction tant que
l'expression de la boucle while est évaluée comme TRUE. La valeur de l'expression est
vérifiée à chaque début de boucle, et donc, si la valeur change durant l'exécution de
l'instruction, l'exécution ne s'arrêtera qu'à la fin de l'itération (chaque fois que le PHP
Publicité
exécute l'instruction, on appelle cela une itération). De temps en temps, si l'expression du
while est FALSE avant la première itération, l'instruction ne sera jamais exécutée.
Comme avec le if, vous pouvez regrouper plusieurs instructions dans la même boucle
while en les regroupant à l'intérieur de parenthèses ou en utilisant la syntaxe suivante:
while (expr): instructions ... endwhile;
Les exemples suivants sont identiques, et affichent tous les nombres de 1 à 10:
/ exemple 1 /
$i = 1;
5 Enseignants : Ouali Mohamed et Hedhli Houssem ISET de Bizerte
Classes : DSI2 Matière : Pgt côté serveur
Chapitre III : Les instructions de contrôle
[Oct 2016]
while ($i <= 10) {
print $i++;
/* La valeur affiche est $i avant l'incrémentation
(post-incrémentation) */
}
/ exemple 2 /
$i = 1;
while ($i <= 10):
print $i;
$i++;
endwhile;
3. do..while
Les boucles do..while ressemblent beaucoup aux boucles while, à la différence que
l'expression est testée à la fin de chaque itération au lieu du début. La principale différence
par rapport à la boucle while est que la première itération de la boucle do..while est
toujours exécutée (l'expression n'est testée qu'à la fin de l'itération), ce qui n'est pas le cas
lorsque vous utilisez une boucle while (l'expression est vérifiée au début de chaque
itération).
Il n'y a qu'une syntaxe possible pour les boucles do..while :
$i = 0;
do {
print $i;
} while ($i>0);
La boucle ci-dessus ne va être exécutée qu'une seule fois, car lorsque l'expression est
évaluée, elle vaut FALSE (car la variable $i n'est pas plus grande que 0) et l'exécution de
la boucle s'arrête.
4. break
L'instruction break permet de sortir d'une boucle.
$i = 0;
while ($i < 10) {
if ($i == 5) {
break;
}
$i++;
}
5. continue
L'instruction continue est utilisée dans une boucle afin d'éluder les instructions de
l'itération courante afin de passer directement à l'itération suivante.
for ($i=0; $i<10; $i++)
{
if ($i==5)
continue;
print "$i <br>";
}
6 Enseignants : Ouali Mohamed et Hedhli Houssem ISET de Bizerte
Classes : DSI2 Matière : Pgt côté serveur