Aller au contenu
M07 · B. Programmer en PHP

Contrôle de flux : conditions et boucles

if / elseif / else, les opérateurs de comparaison et logiques, switch et match, l'opérateur ??, puis les boucles while, do...while, for et foreach pour générer du HTML répétitif.

1Situer

Le site doit choisir : afficher « En stock » ou « Rupture », appliquer ou non les frais de livraison, générer une ligne de tableau par produit. Ces décisions et ces répétitions s'écrivent avec les structures de contrôle, les mêmes qu'en algorithmique (module 02) avec la syntaxe de PHP.

2Comprendre

foreach parcourt le stock, un produit à la fois
foreach ($stock as $nom => $qte) 'Tajine' => 14 'Plat à couscous' => 0 'Savon noir' => 120 fin du tableau → sortie de la boucle variables du tour $nom = ? $qte = ? page produite Tajine : 14 Plat à couscous : Rupture Savon noir : 120

Le tableau $stock associe chaque produit à sa quantité. La boucle foreach va le parcourir du début à la fin.

1 / 5

Comparer et combiner

$stock = 3;
$ville = "Fès";
$montant = 620;

var_dump($stock === 0);                       // bool(false)
var_dump($montant >= 500 && $ville === "Fès"); // bool(true)
var_dump(!($stock > 5));                      // bool(true)

if, elseif, else

if ($stock === 0) {
    $etat = "Rupture";
} elseif ($stock < 5) {
    $etat = "Stock faible";
} else {
    $etat = "En stock";
}

Deux raccourcis très courants :

  • le ternaire condition ? siVrai : siFaux pour choisir une valeur en une ligne ;
  • l’opérateur null coalescent ?? : $page = $_GET['page'] ?? 1; prend la valeur si elle existe, sinon la valeur par défaut. Indispensable avec les formulaires.

Dans un fichier qui mélange HTML et PHP, on utilise la syntaxe alternative, plus lisible :

<?php if ($stock === 0): ?>
  <span class="rupture">Rupture</span>
<?php else: ?>
  <span>En stock : <?= $stock ?></span>
<?php endif; ?>

switch et match

// match : une valeur par cas
$frais = match ($ville) {
    'Casablanca', 'Rabat' => 20,
    'Fès', 'Meknès'      => 30,
    default               => 35,
};

// switch : des instructions par cas
switch ($jour) {
    case 'vendredi':
        echo "Boutique ouverte l'après-midi seulement";
        break;
    case 'dimanche':
        echo "Boutique fermée";
        break;
    default:
        echo "Ouvert de 9 h à 19 h";
}

Les boucles while et do…while

$epargne = 0;
$mois = 0;
while ($epargne < 2000) {
    $epargne += 350;
    $mois++;
}
echo "Objectif atteint en $mois mois";   // 6 mois

Les boucles for et foreach

for ($i = 1; $i <= 3; $i++) {
    echo "<option>$i</option>";
}

$villes = ["Fès", "Safi", "Agadir"];
foreach ($villes as $v) {
    echo "<li>$v</li>";
}

$prix = ["Savon noir" => 30, "Ghassoul" => 40];
foreach ($prix as $nom => $p) {
    echo "<li>$nom : $p DH</li>";
}

break sort de la boucle tout de suite ; continue passe directement au tour suivant.

Exemple simple

Le vendeur de jus

Si le client prend plus de 3 verres, il paie 8 DH le verre ; sinon 10 DH. Une condition, deux chemins : c'est un if / else.

Exemple simple

Le tampon sur chaque colis

Le livreur tamponne chaque colis du camion, un par un, jusqu'au dernier : c'est un foreach sur la liste des colis.

foreach ($colis as $c) {
    echo "Colis $c tamponné<br>";
}

3Manipuler

La page catalogue affiche le stock de chaque produit. Complétez la boucle et les conditions pour réaliser les consignes.
Pas à pas dans le lab ↗ Cliquez sur Exécuter : PHP 8.3 démarre dans votre navigateur (environ 5 Mo à télécharger, une seule fois).

La page s'affichera ici.

Le navigateur demandera /catalogue.php au serveur, qui exécutera le PHP et renverra du HTML.

Entre le navigateur et le serveur aucun échange pour l'instant

Consignes 0 / 3

  1. Les deux produits à 0 affichent « Rupture »
  2. Le tapis (stock 3) affiche « Stock faible » et le bol « En stock »
  3. Sous le tableau : « 2 produit(s) en rupture »

4Pratiquer

Exercice 1 · Mention d'un stagiaire

Selon $moyenne, affichez : moins de 10 « Ajourné », de 10 à moins de 12 « Passable », de 12 à moins de 14 « Assez bien », de 14 à moins de 16 « Bien », sinon « Très bien ».

Voir le corrigé
<?php
$moyenne = 13.5;
if ($moyenne < 10) {
    $mention = "Ajourné";
} elseif ($moyenne < 12) {
    $mention = "Passable";
} elseif ($moyenne < 14) {
    $mention = "Assez bien";
} elseif ($moyenne < 16) {
    $mention = "Bien";
} else {
    $mention = "Très bien";
}
echo "Mention : $mention";

Exercice 2 · Un menu déroulant généré

Générez avec une boucle for une liste <select> des quantités de 1 à 10 (une balise <option> par valeur).

Voir le corrigé
<select name="quantite">
<?php for ($q = 1; $q <= 10; $q++): ?>
  <option value="<?= $q ?>"><?= $q ?></option>
<?php endfor; ?>
</select>

Exercice 3 · match pour le statut

Avec match, traduisez $statut ('en attente', 'payée', 'livrée', 'annulée') en une couleur (orange, bleu, vert, rouge), et « gris » pour toute autre valeur.

Voir le corrigé
<?php
$couleur = match ($statut) {
    'en attente' => 'orange',
    'payée'      => 'bleu',
    'livrée'     => 'vert',
    'annulée'    => 'rouge',
    default      => 'gris',
};

5Vérifier

1. Que vaut $x après : $x = $_GET['page'] ?? 1; si l'URL ne contient pas de paramètre page ?
2. Quelle boucle est faite pour parcourir un tableau ?
3. Combien de fois s'exécute do { ... } while (false); ?