Professional Documents
Culture Documents
14.les Boucles
14.les Boucles
Lorsqu’on code, on va en effet souvent devoir exécuter plusieurs fois un même code.
Utiliser une boucle nous permet de n’écrire le code qu’on doit exécuter plusieurs fois
qu’une seule fois.
Nous allons ainsi pouvoir utiliser les boucles pour parcourir et afficher plusieurs valeurs
un une seule instruction, comme par exemple récupérer la liste des produits achetés
dans une commande, afficher le prénom de tous les utilisateurs de notre site, récupérer
des valeurs jusqu’à un certain point donné dans une variable tableau, etc.
Pour éviter de rester bloqué à l’infini dans une boucle, vous pouvez donc déjà noter
qu’il faudra que la condition donnée soit fausse à un moment donné (pour pouvoir
sortir de la boucle).
Exemple Résultat
Prenons immédiatement un exemple concret pour illustrer les différences entre pré et
post incrémentation ou décrémentation.
<!DOCTYPE html>
<html>
<head>
<title>Cours PHP & MySQL</title>
<meta charset="utf-8">
<link rel="stylesheet" href="cours.css">
</head>
<body>
<h1>Titre principal</h1>
<?php
$x = 2; $y = 2; $a = 2; $b = 2;
echo 'Post incrémentation pour $x : ' .$x++. '<br>';
echo '$x contient maintenant : ' .$x. '<br>';
echo 'Pré incrémentation pour $y : ' .++$y. '<br>';
echo '$y contient maintenant : ' .$y. '<br>';
echo 'Post décrémentation pour $a : ' .$a--. '<br>';
echo '$a contient maintenant : ' .$a. '<br>';
echo 'Pré décrémentation pour $b : ' .--$b. '<br>';
echo '$b contient maintenant : ' .$b. '<br>';
?>
<p>Un paragraphe</p>
</body>
</html>
Cet exemple montre les priorités de traitement du PHP selon que l’on place les
signes ++ et -- avant ou après le nom de notre variable.
On voit que si on echo à nouveau la valeur dans $x ensuite, la valeur est bien
incrémentée.
On réitère ensuite exactement les mêmes opérations mais en utilisant cette fois-ci des
opérateurs de décrémentation avec nos variables â et $b.
Voyons immédiatement la syntaxe de cette boucle que je vais détailler par la suite :
<!DOCTYPE html>
<html>
<head>
<title>Cours PHP & MySQL</title>
<meta charset="utf-8">
<link rel="stylesheet" href="cours.css">
</head>
<body>
<h1>Titre principal</h1>
<?php
$x = 0;
while($x <= 10){
echo '$x contient la valeur ' .$x. '<br>';
$x++;
}
?>
<p>Un paragraphe</p>
</body>
</html>
Dans l’exemple ci-dessus, on commence par stocker la valeur 0 dans notre variable $x.
On dit également qu’on « initialise » notre variable.
Ensuite, on crée notre boucle while, qui va réutiliser $x puisque nous allons boucler sur
les valeurs successives stockées dans $x jusqu’à ce que $x stocke une certaine valeur.
Que se passe-t-il exactement dans cette boucle ? Dans le cas présent, on demande à
notre boucle d’afficher la phrase $x contient la valeur : suivie de la valeur de $x tant que
la valeur stockée dans $x ne dépasse pas 10.
Comment le PHP procède-t-il exactement avec une boucle while ? Ici, le PHP va
commencer par vérifier la valeur de $x pour s’assurer que la condition est vérifiée. Si
c’est le cas, alors il exécutera une première fois le code dans notre boucle avant de se
replacer au départ de notre boucle pour évaluer à nouveau notre condition.
Au début de la boucle, $x contient 0. La condition est donc vérifiée puisque 0 est bien
inférieur à 10. PHP exécuté donc le code à l’intérieur de la boucle, c’est-à-dire afficher
la phrase $x contient la valeur 0 et ajouter 1 à la valeur de $x.
Le PHP se replace ensuite au début de notre boucle et réévalue notre condition. Lors
de ce deuxième passage dans la boucle, notre variable $x contient désormais la valeur
1 (0 + 1). Comme 1 est toujours inférieur à 10, la condition de notre boucle est toujours
vérifiée. Le PHP va donc à nouveau exécuter le code dans la boucle et se replacer au
début de la boucle pour évaluer une troisième fois notre condition.
Lors de ce deuxième passage, c’est la phrase $x contient la valeur 1 qui est affichée
puisque $x contient désormais 1. A la fin de la boucle, on incrémente également à
nouveau $x. $x contient donc désormais la valeur 2 (1 + 1).
Le PHP va continuer à effectuer des passages dans la boucle jusqu’à ce que la valeur
contenue dans $x soit strictement supérieure à 10, c’est-à-dire jusqu’à ce que la
condition ne soit plus vérifiée. Dès que ce sera le cas, nous sortirons alors de la boucle.
Notez qu’il faut toujours bien penser à initialiser la variable utilisée dans la boucle en
dehors de la boucle. En effet, ici, si j’avais initialisé $x dans ma boucle, sa valeur aurait
été réinitialisée à chaque nouveau passage de boucle !
Pensez bien également une nouvelle fois qu’il faudra toujours s’arranger pour qu’à un
moment ou un autre la condition de la boucle ne soit plus vérifiée, afin de pouvoir en
sortir. Dans le cas contraire, le PHP ne pourra jamais sortir de la boucle et le code de
celle-ci sera exécuté en boucle jusqu’à ce que le temps d’exécution du script dépasse
le temps maximum autorisé par votre serveur et qu’une erreur soit renvoyée.
Évidemment, vous n’êtes pas obligés d’incrémenter la valeur de votre variable. Vous
pouvez tout aussi bien décrémenter, multiplier par 2, etc. Le tout est qu’à un certain
moment donné la condition ne soit plus vérifiée pour pouvoir sortir de la boucle.
En effet, la boucle PHP do… while va également nous permettre d’exécuter un code tant
qu’une condition donnée est vraie, mais cette fois-ci le code dans la condition sera
exécuté avant que la condition soit vérifiée.
Ainsi, même si une condition est fausse dès le départ, on effectuera toujours au moins
un passage au sein d’une boucle do…while, ce qui n’est pas le cas avec une boucle while.
<!DOCTYPE html>
<html>
<head>
<title>Cours PHP & MySQL</title>
<meta charset="utf-8">
<link rel="stylesheet" href="cours.css">
</head>
<body>
<h1>Titre principal</h1>
<?php
$x = 0;
$y = 20;
do{
echo '$x contient la valeur ' .$x. '<br>';
$x++;
}while($x <= 5);
do{
echo '$y contient la valeur ' .$y. '<br>';
$y++;
}while($y <= 5);
?>
<p>Un paragraphe</p>
</body>
</html>
Faites bien attention : le while est bien en dehors des accolades.
Dans l’exemple ci-dessus, nous avons créé deux boucles do…while afin de bien illustrer
ce que j’ai dit précédemment.
La deuxième boucle est strictement la même que la première à part qu’on utilise cette
fois-ci une variable $y.
Ainsi, même si la condition est fausse dès le départ, on effectue tout de même un
premier passage dans la boucle (et on exécute donc le code à l’intérieur).
Nous pouvons décomposer le fonctionnement d’une boucle for selon trois phases :
Dans la phase de test, nous allons préciser la condition qui doit être vérifiée pour rester
dans la boucle.
<!DOCTYPE html>
<html>
<head>
<title>Cours PHP & MySQL</title>
<meta charset="utf-8">
<link rel="stylesheet" href="cours.css">
</head>
<body>
<h1>Titre principal</h1>
<?php
for($x = 0; $x <= 5; $x++){
echo '$x contient la valeur ' .$x. '<br>';
}
?>
<p>Un paragraphe</p>
</body>
</html>
Comme vous pouvez le voir, on initialise cette fois-ci directement notre variable à
l’intérieur de notre boucle. Vous pouvez également noter que chaque phase doit être
séparée par un point-virgule.
Le fonctionnement général de la boucle for est ensuite similaire à celui des autres
boucles. Dans l’exemple ci-dessus, on décrémente cette fois notre variable à chaque
nouveau passage dans la boucle pour changer des exemples précédents.
Nous étudierons donc le fonctionnement de cette boucle en même temps que le type
de valeur PHP array (« tableau » en français).
Tout d’abord, si vous travaillez avec des tableaux, vous utiliserez une boucle
PHP for ou foreach selon le type de tableau sur lequel vous travaillez. Nous aurons le
temps de détailler cela lorsqu’on étudiera les tableaux.
Ensuite, dans les autres cas, on choisira d’utiliser une boucle for lorsqu’on sait à priori
combien de passages nous allons effectuer dans notre boucle. En effet, la
boucle for permet de définir la valeur de base d’une variable ainsi que la condition de
sortie de la boucle. C’est donc une convention d’utiliser une boucle for lorsqu’on sait
combien de passage on va effectuer dans une boucle.
Si vous ne savez pas à priori combien de passages vous allez effectuer dans votre
boucle, mais que votre code a besoin d’effectuer toujours au moins un passage dans
la boucle, vous utiliserez une boucle PHP do…while.
Finalement, si vous ne savez pas combien de passages vous allez effectuer dans votre
boucle et que vous ne souhaitez entrer dans la boucle que si la condition est vraie à un
moment donné, vous utiliserez une boucle PHP while.