Apprendre le PHP #3 – structures conditionnelles

Les conditions permettent d’exécuter du code de manière sélective.

On continue dans l’apprentissage du PHP avec un élément clé qui va nous permettre d’écrire nos premiers programmes et algorithmes : les structures conditionnelles. La plus connue est la fameuse « Si, Alors, Sinon » mais on va voir qu’il en existe d’autres.

Au programme :

if/else en PHP

Les conditions permettent d’exécuter du code de manière sélective en fonction de l’état de 1 ou plusieurs éléments de son programme, décidant ainsi si un bloc de code doit être exécuté ou ignoré.

Ce sont des structures essentielles pour gérer des scénarios où le comportement du programme doit varier en fonction de données ou de situations rencontrées.

En PHP, ce « Si, Alors, Sinon » se présente de la façon suivante :

if (... la condition à tester ... ) {
   // ... Alors
} else {
   // ... Sinon
}

Un peu d’explications :

  • Le mot clé « if » est utilisé, suivi de parenthèses pour englober la condition (on va y revenir)
  • Ensuite on ouvre des accolades { … }
  • Démarre alors un « bloc d’instructions » qui peut contenir de 1 à … autant de lignes de code que nécessaire
  • Ce premier bloc d’instructions est celui qui est exécuté si la condition qui suit le « if » est vérifiée, c’est à dire qu’elle vaut « true ».
  • Vient ensuite un autre mot clé « else » puis à nouveau des accolades et un nouveau bloc d’instructions
  • Ce second bloc d’instructions est celui qui est exécuté si la condition qui suit le « if » N’est PAS vérifiée, c’est à dire qu’elle vaut « false ».

Très important : le « else » est facultatif.

Un premier exemple :

$accesAutorise = true;
if ($accesAutorise) {
   echo 'Affichage informations Top Secrètes';
} else {
   echo 'Accès refusé.';
}

Pour ce premier exemple, il n’y a qu’une seule ligne par bloc d’instructions, mais il peut y en avoir beaucoup plus et on peut réaliser toutes sortes d’opérations : créer des variables, faire des calculs, faire de l’affichage, et même intégrer d’autres « if ». Par exemple :

$accesAutorise = true;
$niveauMaximum = false;

if ($accesAutorise) {
   
   if ($niveauMaximum) {
      echo 'Affichage informations ULTRA TOP SECRET';
   } // else facultatif
   
   echo 'Affichage informations UN PEU SECRET';
} else {
   echo 'Accès refusé.';
}

Un peu d’explications :

  • Si $accesAutorise vaut true, j’affiche forcément les infos « UN PEU SECRET ». Mais si en plus j’ai $niveauMaximum qui vaut true, j’affiche en plus les infos « ULTRA TOP SECRET ».
  • Il n’y a pas de « else » qui va avec la condition sur $niveauMaximum

Les différents types de conditions

On peut donc tester des booléens directement, mais surtout on peut comparer 2 valeurs entre elles au sein d’une condition.

Les comparaisons numériques

$valeur = 685;

if ($valeur > 500) {
   // Strictement supérieur à ...
}

if ($valeur >= 500) {
   // Ssupérieur ou égal à ...
}

if ($valeur < 500) {
   // Strictement inférieur à ...
}

if ($valeur <= 500) {
   // Inférieur ou égal à ...
}

Egalité ou différence

$valeur = 333;

if ($valeur === 333) {
   // Egalité parfaite (3x égal)
}

if ($valeur !== 333) {
   // Différence
}

Une précision : ici j’ai utilisé la comparaison stricte. On en parle en détails dans cet article sur les bonnes pratiques de PHP.

Opérations booléennes

Il est possible de réaliser des opérations booléennes directement dans le if, en utilisant donc les opérateurs ET (&&), OU (||) ou NON (!) :

$monAge = 19;
$jaiLeCode = true;

if ($monAge >= 18 && $jaiLeCode) {
   echo 'Tu peux passer le permis de conduire !';
} else {
   
   if ($monAge < 18) {
      $difference = 18 - $monAge;
      echo 'Tu dois encore attendre ' . $difference . ' an(s)';
   }

   if (! $jaiLeCode) {
      echo 'Tu dois passer le code';
   }
}

Un peu d’explications :

  • Pour passer le permis il faut avoir au moins 18 ans ET avoir le Code
  • Si ce n’est pas le cas je vais vérifier chaque condition une par une car je ne sais pas directement laquelle n’est pas remplie
  • Attention, l’inverse de >= est < et non <=
  • J’utilise l’opérateur ! pour inverser la valeur du booléen. On peut lire cette ligne « Si je N’ai PAS le code »

if/elseif en PHP

Il est possible d’imbriquer les si alors sinon si alors sinon etc.

Pour l’exemple, cherchons à afficher le moment de la journée selon l’heure :

$heure = 13;
$cestLEte = false;

if ($heure < 6) {
   echo 'La nuit';
} elseif ($heure < 10) {
   echo 'Le matin';
} elseif ($heure < 12) {
   echo 'Fin de matinée';
} elseif ($heure <= 14) { // La comparaison change un peu ici
   echo 'Midi';
} elseif ($heure < 18) {
   echo 'Après midi';
} elseif ($heure < 20 && $cestLEte) { // Je rajoute une condition "si c'est l'été"
   echo 'Fin d\'après midi';
} else { // Dernier else
   echo 'Soirée'; 
}

Un peu d’explications :

  • Dans tout ce code, une seule ligne sera exécutée. Dès qu’une condition est remplie, on réalise un affichage puis les autres conditions ne sont pas testées.
  • Si $heure vaut 13, on teste dans l’ordre :
    • $heure < 6 => false, on continue
    • $heure < 10 => false, on continue
    • $heure < 12 => false, on continue
    • $heure <= 14 => true, on affiche « Midi » et on s’arrête

Même si cette structure peut paraitre assez intuitive, il s’avère qu’elle est peu utilisée car il y a des structures plus lisibles, comme le switch ou le match (que l’on va voir juste après). Mon conseil (sans compter celui de se passer complètement des else) est de ne pas avoir plus de 2 elseif à la suite. S’il y en a plus de deux, il vaut mieux utiliser une structuration de code différente.

Se passer des else en PHP

C’est un concept un peu plus avancé qui peut nécessiter un peu de temps à apprivoiser. On en parle parfois beaucoup plus tard dans l’apprentissage mais je préfère en parler dès maintenant :

Retirer les else de son code permet de le rendre plus clair.

Ce concept a été expliqué et illustré dans un article dédié : Se passer des else en PHP

Le niveau de cet article est un peu + avancé. N’hésite pas à le garder de côté pour t’y référer + tard.

switch en PHP

La structure switch permet de comparer une même variable à différentes valeurs possibles. C’est très utile quand on souhaite vérifier plusieurs cas pour une même variable… simplifiant le code par rapport à une série de if/else imbriqués.

Premier exemple :

$langueUtilisateur = 'fr';

switch ($langue) {
    case 'fr':
        echo 'Bonjour';
        break;
    case 'en':
        echo 'Hello';
        break;
    case 'es':
        echo 'Hola';
        break;
    default:
        echo 'Langue inconnue';
        break;
}

Un peu d’explications :

  • On commence par le mot clé switch, suivi de la variable à tester entre parenthèses, puis on ouvre les accolades {}
  • Chaque cas à tester commence par le mot clé case, suivi de la valeur à comparer puis de : (2 points)
  • Ces ‘:’ ouvrent un bloc d’instructions, on peut avoir ici autant de code qu’on veut (comme avec les accolades)
  • Le mot clé break indique qu’on a fini, ET qu’on ne veut pas tester les cas suivants. On « casse » le switch, comme ci on allait directement à la dernière accolade.
  • S’il n’y a pas de break, les autres cas seront quand même évalués
  • Enfin, le mot clé default permet de créer un « cas par défaut », c’est à dire une portion de code qui sera exécuté si aucun break n’a été rencontré avant.

Regroupement de cas

On peut regrouper les cas entre eux pour mutualiser l’exécution de code. Reprenons l’exemple d’un peu plus haut avec les heures, mais cette fois-ci avec un switch :

$heure = 13;

switch ($heure) {
   case 0:
   case 1:
   case 2: 
   case 3:
   case 4:
   case 5:
   case 6:
      echo 'La nuit';
      break;

   case 7:
   case 8:
   case 9:
      echo 'Le matin';
      break;

   case 10:
   case 11:
      echo 'Fin de matinée';
      break;

   // Etc.
}

Un peu comme le « elseif », switch est une structure assez intuitive mais pas utilisée tant que ça pour autant. switch a aussi un défaut, c’est qu’il ne réalise pas de comparaison stricte, c’est à dire qu’il peut mélanger les types.

match en PHP

La structure match est + « récente » en PHP, disponible depuis la version 8.0. Cette structure présente une écriture + moderne, + lisible que le switch ainsi que quelques fonctionnalités complémentaires.

Voici comment écrire le même code que pour le switch mais avec la structure match :

$messageAccueil = match($langueUtilisateur) {
   'fr' => 'Bonjour',
   'en' => 'Hello',
   'es' => 'Hola',
};

echo $messageAccueil;

Un peu d’explications :

  • En premier lieu, il faut comprendre que match se comporte comme une fonction et va donc retourner un résultat. Contrairement au switch où l’on faisait le « echo » dans les différents cas, ici on récupère une valeur grâce à match puis on l’affiche ensuite.
  • On commence donc par le mot clé match, suivi de la variable à tester entre parenthèses, puis on ouvre les accolades {}. Point important, ici la dernière accolade est suivie d’un ; comme à la fin d’une instruction classique en PHP.
  • Il y a ensuite un jeu de correspondance entre la valeur à tester, une flèche => (égal et signe + grand que), puis la valeur à retourner. Ici la valeur à retourner est une chaine de caractères mais il peut également s’agir d’un nombre, d’un booléen, voire même d’une opération à réaliser.
  • Chaque ligne termine par une virgule.

Contrairement au switch, match réalise des comparaisons strictes.

Pour en savoir + sur match, comment gérer plusieurs cas d’un coup, comment gérer un cas par défaut, etc. un corrigé dédié a été écrit : la structure match en PHP.

Conclusion

Les structures conditionnelles sont une base fondamentale de la programmation et de l’algorithmie en général. On les retrouve dans tous les programmes informatiques. Il est très important de bien les maitriser.

Voici quelques challenges pour mettre en pratique :

Une fois que tu es à l’aise avec ces structures, tu peux poursuivre vers les tableaux en PHP.


Qui a codé ce superbe contenu ?

Keep learning

Other content to discover