Langage PHP

Notification de cookies

Nous utilisons des cookies pour améliorer votre expérience. En poursuivant votre navigation sur ce site, vous acceptez l'utilisation de cookies. Plus d'informations

les structures conditionnelles en PHP

Ce chapitre est d'une importance capitale. En effet, vous serez très souvent amenés à employer des conditions dans vos pages web PHP.

À quoi servent les conditions ? On a parfois besoin d'afficher des choses différentes en fonction de certaines données. Par exemple, si c'est le matin, vous voudrez dire « Bonjour » à votre visiteur ; si c'est le soir, il vaudra mieux dire « Bonsoir ».

C'est là qu'interviennent les conditions. Elles permettent de donner des ordres différents à PHP selon le cas. Pour notre exemple, on lui dirait :

Si c'est le matin, affiche « Bonjour ». Sinon, affiche « Bonsoir ».

Vous allez voir que les conditions constituent vraiment la base pour rendre votre site dynamique, c'est-à-dire pour afficher des choses différentes en fonction du visiteur, de la date, de l'heure de la journée, etc.

La structure de base : if… else

Une condition peut être écrite en PHP sous différentes formes. On parle de structures conditionnelles. Celle que je vais vous apprendre à utiliser maintenant est la principale à connaître. Nous en verrons d'autres un peu plus loin.

Les symboles à connaître

Juste avant de commencer, je dois vous montrer les symboles que nous serons amenés à utiliser. Je vais vous faire un petit tableau avec ces symboles et leur signification. Essayez de bien les retenir, ils vous seront utiles !

Symbole
Signification
==
Est égal à
===
Est égal à ... et de même type
>
Est supérieur à
<
Est inférieur à
>=
Est supérieur ou égal à
<=
Est inférieur ou égal à
!=
Est différent de

Il y a deux symboles « égal » (==) sur la première ligne, et il ne faut pas confondre ça avec le simple = que je vous ai appris dans le chapitre sur les variables. Ici, le double égal sert à tester l'égalité, à dire « Si c'est égal à… ».

Dans les conditions, on utilisera toujours le double égal (==).

Exemple :

<?php
   $age=8;
   if($age<=12){
      echo "salut mon enfant !";
   }
?>

Ici, on demande à PHP : si la variable $age est inférieure ou égale à 12, affiche « Salut mon enfant ! ».

Vous remarquerez que dans la quasi-totalité des cas, c'est sur une variable qu'on fait la condition.

Dans notre exemple, on travaille sur la variable $age. Ce qui compte ici, c'est qu'il y a deux possibilités : soit la condition est remplie (l'âge est inférieur ou égal à 12 ans) et alors on affiche quelque chose ; sinon, eh bien on saute les instructions entre accolades, on ne fait rien.

Bon, on peut quand même améliorer notre exemple. On va afficher un autre message si l'âge est supérieur à 12 ans :

<?php
   $age=8;
   if($age<=12){
      echo "salut mon enfant ! bienvenue sur mon site !<br />";
      $autorisation_entrer="oui";
   }
   else{
      echo "vous etes trop vieux pour pouvoir entrer <br />";
      $autorisation_entrer="nom";
   }
   echo "autorisation d'entrer ? : $autorisation_entrer";
?>

Bon : comment marche ce code ? Tout d'abord, j'ai mis plusieurs instructions entre accolades.

Ensuite, vous avez remarqué que j'ai ajouté le mot else ( sinon ). En clair, on demande : Si l'âge est inférieur ou égal à 12 ans, fais ceci, sinon  fais cela.

Essayez ce bout de code chez vous, en vous amusant à modifier la valeur de $age (sur la première ligne). Vous allez voir que le message qui s'affiche change en fonction de l'âge que vous indiquez !

Bien entendu, vous mettez les instructions que vous voulez entre accolades.

Ici par exemple, j'ai donné une valeur différente à la variable $autorisation_entrer après avoir affiché un message, valeur qui pourrait nous servir par la suite :

<?php
   if($autorisation_entrer=="oui"){
      //instructions 1
   }
   else if($autorisation_entrer=="non"){
      //instructions 2
   }
   else{//sinon
      echo "Euh, je ne connais pas ton age ";
   }
?>

La principale nouveauté ici, c'est le mot-clé else if qui signifie « sinon si ». Dans l'ordre, PHP rencontre les conditions suivantes :

si $autorisation_entrer est égale à « Oui », tu exécutes ces instructions…

sinon si $autorisation_entrer est égale à « Non », tu exécutes ces autres instructions…

sinon, tu afficheras un message dit que tu ne sais pas son âge.

Le cas des booléens

Si vous regardez bien le dernier code source (avec $autorisation_entrer), vous ne trouvez pas qu'il serait plus adapté d'utiliser des booléens ?

Ce sont ces variables qui valent soit true (vrai) soit false (faux). Eh bien, les booléens sont particulièrement utiles avec les conditions !

Voici comment on teste une variable booléenne :

<?php
   if($autorisation_entrer==true){
      echo "salut mon enfant ! bienvenue sur mon site !<br />";
   }
   else if($autorisation_entrer==false){
      echo "T'as pas le droit d'entrer ! ";
   }
?>

Voilà, jusque-là rien d'extraordinaire. Vous avez vu que je n'ai pas mis de guillemets pour true et false, comme je vous l'ai dit dans le chapitre sur les variables.

Mais un des avantages des booléens, c'est qu'ils sont particulièrement adaptés aux conditions.

Pourquoi ? Parce qu'en fait vous n'êtes pas obligés d'ajouter le == true. Quand vous travaillez sur une variable booléenne, PHP comprend très bien ce que vous avez voulu dire :

<?php
   if($autorisation_entrer){
      echo "salut mon enfant ! bienvenue sur mon site !<br />";
   }
   else{
      echo "T'as pas le droit d'entrer ! ";
}
?>

PHP comprend qu'il faut qu'il vérifie si $autorisation_entrer vaut true.

c'est plus rapide à écrire pour vous ;

ça se comprend bien mieux.

C'est donc un raccourci à connaître quand on travaille sur des booléens.

Il y a un symbole qui permet de vérifier si la variable vaut false : le point d'exclamation (!). On écrit :

<?php
   if(! $autorisation_entrer){
      echo "T'as pas le droit d'entrer ! ";
   }
?>

C'est une autre façon de faire. Si vous préférez mettre if ($autorisation_entrer == false) c'est tout aussi bien, mais la méthode « courte » est plus lisible.

Des conditions multiples

Ce qu'on va essayer de faire, c'est de poser plusieurs conditions à la fois. Pour cela, on aura besoin de nouveaux mots-clés. Voici les principaux à connaître :

Mot-clé

Signification

Symbole équivalent

AND

Et

&&

OR

Ou

||

Le symbole équivalent pour OR est constitué de deux barres verticales. Pour taper une barre verticale, appuyez sur les touches « Alt Gr » et « 6 » en même temps (sur un clavier AZERTY français).

Exemples :

<?php
   $age=9;
   $sexe="garcon";
   if($age<=12 && $sexe=="garcon"){
      echo "bienvenue sur le site mon petit garcon";
   }
   else if($age<=12 && $sexe=="fille"){
      echo "bienvenue sur le site ma petite fille";
   }
?>

Bon allez, un dernier exemple avec || pour que vous l'ayez vu au moins une fois, et on arrête là.

<?php
   $sexe="fille";
   if($sexe=="garcon" || $sexe="fille"){
      echo "salut";
   }
   else{
      echo "veuillez introduire votre sexe s.v.p !";
   }
?>

L'astuce bonus :

Avec les conditions, il y a une astuce à connaître.

Sachez que les deux codes ci-dessous donnent exactement le même résultat :

<?php
   if($age==23){
      echo '<strong>votre age est : </strong> 23';
   }
?>
<?php
   if($age==23){
      ?>
      <strong>votre age est : </strong> 23
      <?php
   }
?>

Comme vous le voyez, dans  la seconde colonne on n'a pas utilisé de echo. En effet, il vous suffit  d'ouvrir l'accolade ({), puis de fermer la balise PHP (?>), et vous pouvez  mettre tout le texte à afficher que vous voulez en HTML !

Cette méthode est pratique quand il y a de grosses quantités de texte à afficher, et aussi pour éviter d'avoir à se prendre la tête avec les antislashs devant les guillemets (") ou (').

Il vous faudra toutefois penser à refermer l'accolade après (à l'intérieur d'une balise PHP, bien entendu).

Une alternative pratique : switch

En théorie, les structures à base de if… elseif… else que je viens de vous montrer suffisent pour traiter n'importe quelle condition.

Pour vous faire comprendre l'intérêt de switch, je vais vous donner un exemple un peu lourd avec les if et elseif que vous venez d'apprendre :

<?php
if($note==10){
   echo 'tu es vraiment un gros zéro ';
}
else if($note==5){
   echo "tu es très mauvais ";
}
else if($note==7){
   echo "tu es mauvais ";
}
else if($note==10){
   echo "tu es moyenne ";
}
else if($note==12){
   echo "tu es assez bien";
}
else if($note==16){
   echo "tu te débrouilles très bien ! ";
}
else if($note==20){
   echo "Excellent travail, c'est parfait !";
}
else{
   echo "désolé, je n'ai pas de message à afficher pour cette note";
}
?>

Comme vous le voyez, c'est lourd, long, et répétitif. Dans ce cas, on peut utiliser une autre structure plus souple : c'est switch.

Voici le même exemple avec switch (le résultat est le même, mais le code est plus adapté) :

<?php
$note=5;
switch ($note) {
   case 0:
         echo 'tu es vraiment un gros zéro ';
         break;
   case 5:
         echo "tu es très mauvais ";
         break;
   case 7:
         echo "tu es mauvais ";
         break;
   case 10:
         echo "tu es moyenne ";
         break;
   case 12:
         echo "tu es assez bien";
         break;
   case 16:
         echo "tu te débrouilles très bien ! ";
         break;
   case 20:
         echo "Excellent travail, c'est parfait !";
         break;
   default:
         echo "désolé, je n'ai pas de message à afficher pour cette note";
         break;
}
?>

Essayez de changer la note (dans la première instruction) pour voir comment PHP réagit ! Et si vous voulez apporter quelques modifications à ce code.

Tout d'abord, il y a beaucoup moins d'accolades (elles marquent seulement le début et la fin du switch).

Avantage : on n'a plus besoin de mettre le double égal !

Défaut : ça ne marche pas avec les autres symboles (< > <= >= !=). En clair, le switch ne peut tester que l'égalité.

Le mot-clé default à la fin est un peu l'équivalent du else. C'est le message qui s'affiche par défaut quelle que soit la valeur de la variable.

Il y a cependant une  chose importante à savoir : supposons dans notre exemple que la note soit de 10. PHP va lire : case 0 ? Non. Je saute. case 5 ? Non plus. Je saute. case 7 ? Non plus. Je saute. case 10 ? Oui, j'exécute les instructions. Mais contrairement aux elseif, PHP ne s'arrête pas là et continue à lire les instructions des cas qui suivent ! case 12, case 16, etc.

Pour empêcher cela, utilisez l'instruction break.

L'instruction break demande à PHP de sortir du switch.

Dès que PHP tombe sur break, il sort des accolades et donc il ne lit pas les cas qui suivent. En pratique, on utilise très souvent un break car sinon, PHP lit des instructions qui suivent et qui ne conviennent pas.

Essayez d'enlever les break dans le code précédent, vous allez comprendre pourquoi ils sont indispensables !

Quand doit-on choisir if, et quand doit-on choisir switch ?

C'est surtout un problème de présentation et de clarté. Pour une condition simple et courte, on utilise le if, et quand on a une série de conditions à analyser, on préfère utiliser switch pour rendre le code plus clair.

Les ternaires : des conditions condensées

Il existe une autre forme de condition, beaucoup moins fréquente, mais que je vous présente quand même car vous pourriez un jour ou l'autre tomber dessus. Il s'agit de ce qu'on appelle les ternaires.

Un ternaire est une condition condensée qui fait deux choses sur une seule ligne :

  • on teste la valeur d'une variable dans une condition ;
  • on affecte une valeur à une variable selon que la condition est vraie ou non.

Prenons cet exemple à base de if… else qui met un booléen $majeur à vrai ou faux selon l'âge du visiteur :

<?php
$age=24;
if($age>=18){
   $majeur='majeur';
}
else{
   $majeur='non majeur';
}
echo $majeur;
?>

On peut faire la même chose en une seule ligne grâce à une structure ternaire :

<?php
$age=24;
$majeur=($age>=18)? 'Majeur':'non majeur';
echo $majeur;
?>

Ici, tout notre test précédent a été fait sur une seule ligne !

      


Partager ce cours avec tes amis :

Rédigé par M. ESSADDOUKI

Learning a new programming language is an easy thing, but the most difficult thing is how to design efficient algorithms for real-world problems, so don't be a programmer, be a problems solver.

Cours Similaires :