4- Les instructions de contrôle

1- Les instructions conditionnelles :

Comme tout langage, PHP dispose d’instructions conditionnelles qui permettent d’orienter le déroulement d’un script en fonction de la valeur de données.

Les structures conditionnelles ou tout simplement les conditions permettent d’exécuter une partie de code selon si une condition est vérifiée ou non. 

L’INSTRUCTION if

En PHP, la condition la plus minimaliste possible requiert l’instruction if. En français, on peut tout simplement traduire cette instruction par si.
Ci-après la syntaxe d’une condition if.

Sa syntaxe est la suivante :

<?php
   $a = 2;
   if($a > 1)
      echo 'La variable $a est plus grand que 1.';
?

Nous avons donc l’instruction if puis entre parenthèses le test de la condition. Chaque test est converti en valeur booléenne. Par conséquent, si le test vaut true, alors le PHP exécutera le code à l’intérieur de la condition, si le test vaut false, alors il sera ignoré. Il est possible de faire tout un tas de tests complètement différents avec divers opérateurs de comparaisons qui remplissent des fonctions bien différentes. Nous resterons pour le moment sur des opérateurs triviaux comme < ou >.


L’instruction if peut être suivie d’un bloc d’instructions délimité par des parenthèses qui sera entièrement exécuté dans les mêmes conditions :

<?php
   $a = 2;
   if($a > 1) {
      echo 'La variable $a est plus grand que 1.';
      $b = 0;
   }
?>

Il est possible d’imbriquer les conditions. La syntaxe des instructions if n’est pas impactée. Ci-dessous un exemple.

<?php
   $a = 2;
   if($a > 1) {
      echo 'La variable $a est plus grand que 1.';
      $b = 0;
      if($b < 2) {
         echo '<br />La variable $b est plus petite que 2.'; 
      }
   }
?>

Une erreur courante consiste à confondre l’opérateur de comparaison == avec l’opérateur d’affectation =. Dans les expressions conditionnelles, pour tester l’égalité de deux valeurs il faut employer l’opérateur == ou encore === pour tester l’identité (même valeur et même type).

L’INSTRUCTION <code><strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-luminous-vivid-orange-color">ELSE</mark></strong> et <strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-luminous-vivid-orange-color">ELSEIF</mark></strong>

L’instruction if…else permet de traiter le cas où l’expression conditionnelle est vraie et en même temps d’écrire un traitement de rechange quand elle est évaluée à FALSE, ce que ne permet pas une instruction if seule. L’instruction ou le bloc qui suit else est alors le seul à être exécuté. L’exécution continue ensuite normalement après le bloc else.
Le bloc qui suit les instructions if ou else peut contenir toutes sortes d’instructions, y compris d’autres instructions if…else. Nous obtenons dans ce cas une syntaxe plus complexe, de la forme :

<?php
   $a = 2;
   if($a > 1) {
      echo 'La variable $a est plus grand que 1.';
   } else {
      echo 'La variable $a est plus petit ou égale à 1.';
   }
?>

Comme son nom l’indique, l’instruction elseif est une combinaison de l’instruction if et else. Le bloc d’instruction du elseif est exécuté uniquement si le test de condition du premier if n’est pas vérifié et vaut donc false. Seulement, à la différence de else, le bloc d’instruction du elseif ne s’exécutera que si le test de sa condition est vérifié et vaut donc true.

<?php
   $a = 5;
   if($a < 1) {
      echo 'La variable $a est plus petit que 1.';
   } elseif($a > 4) {
      echo 'La variable $a est plus grand que 4.';
   } else {
      echo 'La variable $a est entre 1 et 4.';
   }
?>

Les opérateurs ? et ??

L’opérateur ? Permet de remplacer avantageusement une instruction if…else en évaluant une expression et en attribuant à une variable une première valeur si la condition est vraie ou une autre valeur si elle est fausse.

  • Opérateur ? (Ternaire) :

L’opérateur ternaire ? permet de créer une expression conditionnelle en évaluant une condition et en retournant une valeur en fonction de cette condition. Sa syntaxe est la suivante :

$resultat = (condition) ? valeur_si_vrai : valeur_si_faux;

Exemple :

$age = 18;
$message = ($age >= 18) ? "Majeur" : "Mineur";
echo $message; // Affiche "Majeur"
  • Opérateur ?? (Null Coalesce) :

L’opérateur ?? est utilisé pour fournir une valeur de secours (fallback) si une variable est nulle (null). Il permet de vérifier si une variable existe et, si elle est nulle, de fournir une valeur par défaut. Sa syntaxe est la suivante :

$resultat = $variable ?? valeur_par_defaut;

Exemple :

$nom = "John";
$prenom = null;

$nom_complet = $prenom ?? "Prénom inconnu";
echo "Nom complet : " . $nom . " " . $nom_complet; // Affiche "Nom complet : John Prénom inconnu"
  1. Dans cet exemple, l’opérateur ?? vérifie si la variable $prenom est nulle, et si c’est le cas, il utilise la valeur par défaut « Prénom inconnu ».

Ces deux opérateurs sont très utiles pour gérer les valeurs nulles de manière concise et élégante dans votre code PHP.

L’instruction switch…case

L’instruction switch...case en PHP permet de gérer plusieurs cas (valeurs) pour une variable et d’exécuter un bloc de code en fonction de la valeur de la variable.

La syntaxe de cette instruction est la suivante :

Voici un exemple de code :

<?php
$jourDeLaSemaine = "Lundi";

switch ($jourDeLaSemaine) {
    case "Lundi":
        echo "C'est le début de la semaine.";
        break; // La clause "break" est importante pour éviter l'exécution des autres cas.
    
    case "Mardi":
        echo "C'est le deuxième jour de la semaine.";
        break;
    
    case "Mercredi":
        echo "C'est le milieu de la semaine.";
        break;
    
    case "Jeudi":
        echo "C'est presque le week-end.";
        break;
    
    case "Vendredi":
        echo "C'est le dernier jour de la semaine de travail.";
        break;
    
    case "Samedi":
    case "Dimanche":
        echo "C'est le week-end !";
        break;
    
    default:
        echo "Ce n'est pas un jour valide.";
        break;
}
?>

EXERCICES (LES CONDITIONS (IFELSE ET ELSEIF))

EXERCICE 5

Déclarer une variable $sexe qui contient une chaîne de caractères. Créer une condition qui affiche un message différent en fonction de la valeur de la variable.

EXERCICE 6

Déclarer une variable $budget qui contient la somme de 1 553,89 €. Déclarer une variable $achats qui contient la somme de 1 554,76 €. Afficher si le budget permet de payer les achats.

EXERCICE 7

Déclarer une variable $age qui contient la valeur de type integer de votre choix. Réaliser une condition pour afficher si la personne est mineure ou majeure.

EXERCICE 8

Déclarer une variable $heure qui contient la valeur de type integer de votre choix comprise entre 0 et 24. Créer une condition qui affiche un message si l’heure est le matin, l’après-midi ou la nuit.

CORRECTION

EXERCICE 5

<?php
   $sexe = 'homme';
   if($sexe == 'femme') :
      echo 'Bonjour Madame.';
   elseif($sexe == 'homme') :
      echo 'Bonjour Monsieur.';
   else :
      echo 'Bonjour sexe inconnu.';
   endif;
?>

EXERCICE 6

<?php
   $budget = 1553.89;
   $achats = 1554.76;
   if($budget >= $achats) :
      echo 'Le budget ('.$budget.' €) permet de payer tous les achats ('.$achats.' €).';
   else :
      echo 'Le budget ('.$budget.' €) ne permet pas de payer tous les achats ('.$achats.' €).';
   endif;
?>

EXERCICE 7

<?php
   $age = 19;
   if($age >= 18)
      echo 'Vous êtes majeur.';
   else
      echo 'Vous êtes mineur.';
?>

EXERCICE 8

<?php
   $heure = 14;
   if($heure < 0 || $heure > 23) :
      echo 'Houla, cette heure est incorrecte.';
   elseif($heure >= 7 && $heure < 12) :
      echo 'Bonne matinée.';
   elseif($heure >= 12 && $heure < 22) :
      echo 'Bonne après-midi.';
   else :
      echo 'Bonne nuit.';
   endif;
?>

2- Les instructions de boucle

En PHP, comme dans bien d’autres langages de programmation, les boucles sont des éléments clés. Il est essentiel de les maîtriser pour développer efficacement. Que l’on développe un simple site web, une fusée ou un jeu vidéo, on a besoin de boucles.

Les boucles permettent de répéter l’exécution d’une portion de code un certain nombre de fois en fonction d’un test de condition. Tant que ce dernier est vérifié, alors la portion de code s’exécute. Pour une exécution d’une portion de code, on parle d’une itération de la boucle. Quel que soit le type de boucles utilisé, il sera nécessaire d’employer une condition pour mettre fin à la boucle.

En PHP, il existe 4 boucles différentes. Elles remplissent la même finalité mais comportent des différences.

  • for
  • while
  • do...while
  • foreach

La boucle for

Présente dans de nombreux langages, la boucle for permet d’exécuter plusieurs fois la même instruction ou le même bloc sans avoir à réécrire les mêmes instructions.

Elle est largement utilisée car elle a des avantages indéniables, mais a une syntaxe assez particulière, surtout pour les débutants. Tout d’abord, l’instruction for pourrait être traduite en français par « pour ». 

Sa syntaxe est la suivante :

  • expression1: Le premier élément de la boucle for correspond tout simplement à la déclaration de la variable pour initiation
  • expression2: pour le deuxième élément, la boucle for a besoin comme toutes les boucles d’un test de condition.
  • expression3: Le dernier élément correspond à une incrémentation ou une décrémentation de variable.

Les éléments sont séparés par des points virgules <strong>;</strong>.

Exemple:

<?php
   for($i = 0;$i < 10;$i++) {
      echo 'La variable $i a '.$i.' comme valeur.<br />';
   }
?>

La boucle while

L’instruction while pourrait être traduite en français par « tant que ». Si on vulgarise l’utilisation de cette boucle, on peut dire que cette dernière va exécuter la même portion de code tant que la condition est vérifiée.

Exemple:

<?php
   $z = 0;
   while($z < 10) {
      echo 'La variable $z a '.$z.' comme valeur.<br />';
      $z++;
   }
?>

L’exemple démarre avec la déclaration de la variable $z avec une valeur de zéro.

La boucle va donc exécuter la portion de code entre les accolades { et } tant que la condition est vérifiée.

On demande donc à notre boucle while d’afficher une chaîne de caractères et d’incrémenter $z, tant que $z est strictement inférieure à 10. L’étape d’incrémentation de la variable $z est indispensable dans notre cas, car sinon le test de condition serait éternellement non vérifié, et la boucle ne s’arrêterait jamais. Si c’est le cas, on appelle ça une boucle infinie.

La boucle do…while

L’instruction do...while pourrait être traduite en français par « faire… tant que ». La boucle do...while est très proche de la boucle while. La différence est que la boucle do...while commence par exécuter sa portion de code avant de vérifier sa condition alors que la boucle while fait l’inverse.

La syntaxe de la boucle do…while est la suivante :

Un exemple pour comparer les deux et tout deviendra plus clair.

<?php
   $z = 2;
   do {
      echo 'La variable $z a '.$z.' comme valeur.';
   } while($z < 1);
?>

Dans l’exemple de gauche avec do...while, la boucle commence par exécuter une fois sa portion de code. La chaîne de caractères s’affiche puis le test de condition s’effectue. En l’occurence la variable $z n’a pas une valeur strictement inférieure à 1, la boucle s’arrête donc.

La boucle foreach

La boucle foreach est particulièrement efficace pour lister les tableaux associatifs dont il n’est nécessaire de connaître ni le nombre d’éléments ni les clés. Sa syntaxe est variable selon que vous souhaitez récupérer seulement les valeurs ou les valeurs et les clés (ou les indices).
Pour lire les valeurs seules, la première syntaxe est la suivante :

$personne = ["nom" => "Doe", "prénom" => "John", "âge" => 30];
foreach ($personne as $cle => $valeur) {
    echo "$cle : $valeur<br>";
}

Remarque :

Foreach et les objets

Depuis PHP 5, vous pouvez lire l’ensemble des noms et des valeurs des propriétés d’un objet à l’aide d’une boucle foreach comme nous le faisons pour un tableau.

Sortie anticipée des boucles

Vous pouvez avoir besoin d’arrêter une boucle avant son terme normal. Pour cela, vous disposez des instructions break et continue, qui permettent de réaliser un arrêt partiel ou total.

L’instruction break

Il est possible d’arrêter complètement une boucle for, foreach ou while avant son terme normal si une condition particulière est vérifiée, à l’aide de l’instruction break. Le script n’est pas arrêté, comme avec l’instruction exit, et seule la boucle en cours se termine.

L’instruction continue

À la différence de l’instruction break, l’instruction continue n’arrête pas la boucle en cours mais seulement l’itération en cours. La variable compteur est incrémenté immédiatement, et toutes les instructions qui suivent le mot-clé continue ne sont pas exécutées lors de l’itération en cours.

for ($i = 1; $i <= 10; $i++) {
    if ($i == 5) {
        break; // Sort de la boucle lorsque $i atteint 5
    }
    if ($i % 2 == 0) {
        continue; // Passe à l'itération suivante si $i est pair
    }
    echo "$i<br>";
}

EXERCICES (LES BOUCLES)

EXERCICE 9

En utilisant la boucle while, afficher tous les codes postaux possibles pour le département 77.

EXERCICE 10

En utilisant la boucle for, afficher la table de multiplication du chiffre 5.

EXERCICE 11

En utilisant deux boucles for, écrire un script qui produit le résultat ci-dessous.

EXERCICE 12

Déclarer une variable avec le nom de votre choix et avec la valeur 0. Tant que cette variable n’atteint pas 20, il faut :

  • l’afficher ;
  • incrémenter sa valeur de 2 ;

Si la valeur de la variable est égale à 10, la mettre en valeur avec la balise HTML appropriée.

CORRECTION

EXERCICE 9

<?php
   $i = 77000;
   while($i <= 77999) {
      echo $i.' ';
      $i++;
   }
?>

EXERCICE 10

<?php
   $n = 5;
   for($i = 1;$i <= 10;$i++) {
      echo $n.' x '.$i.' = '.($n * $i).' <br />';
   }
?>

EXERCICE 11

<?php
   for($i = 1;$i <= 5;$i++) {
      for($k = 1;$k <= $i;$k++) {
         echo $i;
      }
      echo '<br />';
   }
?>

EXZECICE 12

<?php
   $k = 0;
   while($k <= 20) {
      if($k == 10) {
         echo '<strong>'.$k.'</strong>';	  
      } else {
         echo $k;
      }
      echo '<br />';
      $k = $k + 2;
   }
?>

Retour Plan de Cours