PHP – Les embranchements conditionnels

Dans les articles précédents, nous avons appris à déclarer des variables – dont les tableaux, utiliser des opérateurs mathématiques, et l’opérateur de concaténation. Aujourd’hui nous allons voir un outil fort pratique en programmation, les embranchements conditionnels. C’est-à-dire qu’une partie du code ne sera exécutée que si la condition d’entrée est vraie.

Les conditions et ses opérateurs

Les embranchements conditionnels sont de la forme « if … else if … else ». En français : « Si … Sinon Si … Sinon ».

Je vais maintenant reprendre l’exemple donné dans la partie Code <> / Général / Définition et algorithmie : « Je souhaites réaliser un programme qui me dit si je suis majeur ou mineur, et qui devra effectuer des actions précises dans les deux cas de figure ».

En premier lieu, nous avons besoin d’une variable « age », définissons la dans un nouveau fichier PHP, à la valeur 25 pour commencer.

Fichier tutophp3/index.php :
<?php

  $age = 25;

?>

Voila qui est fait. Maintenant, j’aimerais effectuer une action lorsque je suis majeur, et une autre si je suis mineur. Définissons ces actions : on va simplement afficher, pour le moment, les chaines suivantes : « Vous êtes majeur! » et « Vous êtes mineur! ».

Fichier index.php, suite :
<?php

  $age = 25;

  if($age >= 18)
  {
    echo 'Vous êtes majeur!';
  }
  else
  {
    echo 'Vous êtes mineur!';
  }

?>

Pour le moment, le code n’affichera que la chaine « Vous êtes majeur! ». Changez la variable « age » à 15 par exemple, et il sera alors affiché « Vous êtes mineur! ». Notez que j’ai utilisé des accolades ouvrantes et fermantes. Celles-ci déclarent un bloc d’instructions. Elle sont complètement optionnelles si nous n’avons qu’une seule instruction. Comme c’est notre cas, nous allons modifier le fichier de sorte à le simplifier, en profiter pour transformer la variable « age » par de l’aléatoire (via la fonction PHP rand()), et nous en profiterons également pour afficher l’âge que le script aura choisi pour nous.

Fichier index.php, v2 :
<?php

  $age = rand(1, 30);

  echo 'Age choisi: ', $age, '<br>';

  if($age >= 18)
    echo 'Vous êtes majeur!';
  else
    echo 'Vous êtes mineur!';

?>

Allez-y, exécutez ce code à plusieurs reprises, et vous verrez qu’un choix a été fait entre l’action « mineur » et l’action « majeur ». Nous avons donc légèrement simplifié le script, et PHP nous choisi un nombre au hasard entre dans la fourchette [1 ; 30] (donc 1 et 30 inclus).

Il existe une autre façon d’écrire des conditions en PHP. La voici ci-après.

Fichier index.php, v3 :
<?php

  $age = rand(1, 30);

  echo 'Age choisi: ', $age, '<br>';

  if($age >= 18):
    echo 'Vous êtes majeur!';
  else:
    echo 'Vous êtes mineur!';
  endif;

?>

Notez que sous cette forme, on a ajouté un double-points (« : ») à la fin début de chaque embranchement conditionnel (juste après la condition), mais aussi la présence de « endif; » pour terminer l’embranchement conditionnel. Pourquoi la présence de ce « endif; » ? Simplement parce que sous cette forme, les accolades sont strictement inutiles –  vous pouvez donc exécuter plusieurs instructions à la suite. Vous pouvez toutefois en rajouter si vous le souhaitez.

Modifions un peu le code maintenant pour détecter un adolescent. Il n’y a pas vraiment d’âge pour laquelle cette période commence, cependant nous allons la fixer à 12.

Fichier index.php, v4a :
<?php

  $age = rand(1, 30);

  echo 'Age choisi: ', $age, '<br>';

  if($age >= 18)
    echo 'Vous êtes majeur!';
  elseif($age >= 12)
    echo 'Vous êtes adolescent!';
  else
    echo 'Vous êtes mineur!';

?>
Fichier index.php, v4b :
<?php

  $age = rand(1, 30);

  echo 'Age choisi: ', $age, '<br>';

  if($age >= 18):
    echo 'Vous êtes majeur!';
  elseif($age >= 12):
    echo 'Vous êtes adolescent!';
  else:
    echo 'Vous êtes mineur!';
  endif;

?>

Nous avons introduit le mot-clé « elseif ». Attention: dans sa seconde forme il doit obligatoirement être en un seul mot (lors de l’utilisation du double-point), cependant, sous sa première forme (celle avec les accolades), « elseif » peut être écrit « else if » (donc avec un espace, en deux mots). La différence étant subtile, notez-le bien dans votre tête ou mettez cette page dans vos favoris. Vous pouvez aussi consulter la page officielle ici : http://php.net/manual/fr/control-structures.elseif.php. Notez aussi qu’on ne peut pas mélanger ces deux écritures entre elle, lorsqu’elles font partie du même bloc conditionnel.

Les opérateurs de comparaison

Nous n’avons vu qu’un seul opérateur de comparaison jusque là : « Supérieur ou Egal à », noté « >= ». Je vais vous lister tous les opérateurs possible :

  • « > » : Supérieur à
  • « < » : Inférieur à
  • « >= » : Supérieur ou Egal à
  • « <= » : Inférieur ou Egal à
  • « == » : Egal à (deux signe « égal » car il est aussi utilisé pour les assignations)
  • « != » : Différent de
  • « === » : Strictement Egal (compare la valeur ET le type des variables)
  • « !== » : Strictement Différent de (compare la valeur ET le type des variables)

Tentons de comprendre à présent les 4 derniers opérateurs cités. Nous allons travailler sur un exemple précis. Prenons un chiffre, au hasard, le 5, et assignons-le d’abord comme un nombre entier, puis ensuite comme une chaine de caractères. Ensuite utilisons nos 4 derniers opérateurs de comparaisons.

Exemple de comparaisons :
<?php

  $varNumber = 5;
  $varString = '5';
  
  if ($varNumber == $varString)
    echo "5 == '5'";
  else if ($varNumber != $varString)
    echo "5 != '5'";

  echo '<br>';
  
  if ($varNumber === $varString)
    echo "5 === '5'";
  else if ($varNumber !== $varString)
    echo "5 !== '5'";

?>
Résultat :
5 == '5'
5 !== '5'

On remarque bien que dans le premier cas, PHP a convertit tout seul un nombre en chaine ou inversement, et a ensuite comparé les valeurs. La chaine de caractères se trouve alors être égale à notre entier. Cependant, dans le second cas de figure, une comparaison sur les types à été effectuée en plus de comparer les valeurs. Les valeurs ont beau être identique, les types des variables sont différent l’une de l’autre. Un conseil de pro, c’est de toujours vérifier les types des variables en plus des valeurs, cela permet d’éviter bien des bogues, et quelques failles de sécurité par-ci par-là. De plus, la comparaison typée est plus rapide a exécuter que son homologue non typée, du fait qu’il n’y a pas l’opération de conversion entre temps. Bref, question optimisations, c’est un point supplémentaire en faveur de la comparaison typée.

Les opérateurs logiques

Outre les opérateurs de comparaisons, il existe aussi les opérateurs logiques. Ceux-ci nous permettent d’effectuer plusieurs conditions en une seule.

Voici ces opérateurs :

  • « && » ou « and » : ET
  • « || » ou « or » : OU
  • « xor » : OU Exclusif
  • « ! » : NON
« && »

Ce cas permet de valider la condition que si les membres situés à gauche et à droite sont vrais.

« && » Exemple :
<?php

  $nombre1 = rand(-1, 1);
  $nombre2 = rand(-1, 1);

  if ($nombre1 > 0 && $nombre2 > 0)
    echo 'Les deux nombres sont positifs';
  else if ($nombre1 < 0 && $nombre2 < 0)
    echo 'Les deux nombres sont négatifs';
  else if ($nombre1 > 0 && $nombre2 < 0)
    echo 'N1 > 0 et N2 < 0';
  else if ($nombre1 < 0 && $nombre2 > 0)
    echo 'N1 < 0 et N2 > 0';
  else
    echo 'Au moins un nombre est nul';

?>
« || » :

Ce cas valide la condition si au moins un des deux membres est vrai, même si l’autre est faux.

« || » Exemple
<?php

  $nombre1 = rand(-1, 1);
  $nombre2 = rand(-1, 1);

  if ($nombre1 > 0 || $nombre2 > 0)
    echo 'Au moins un des deux nombres est  positif';
  else if ($nombre1 < 0 || $nombre2 < 0)
    echo 'Au moins un des deux nombres est négatif';
  else
    echo 'Les deux nombres sont soit positifs, soit négatifs, soit nuls';

?>
« xor »

Le « xor » est un peu plus compliqué. Il est vrai si un des membres est vrai et l’autre est faux. En revanche, si les deux membres de la condition sont vrais ou que les deux membres sont faux, alors la condition est fausse.

« xor » Exemple :
<?php

  $nombre1 = rand(-1, 1);
  $nombre2 = rand(-1, 1);

  if ($nombre1 > 0 xor $nombre2 > 0)
    echo 'Au moins un des deux nombres est positif et l\'autre est négatif ou nul.';
  else if ($nombre1 < 0 xor $nombre2 < 0)
    echo 'Au moins un des deux nombres est négatif et l\'autre est positif ou nul.';
  else if ($nombre1 > 0 xor $nombre2 < 0)
    echo '(N1 > 0 et N2 >= 0) OU (N1 <= 0 et N2 <= 0)';
  else if ($nombre1 < 0 xor $nombre2 > 0)
    echo '(N1 < 0 et N2 <= 0) OU (N1 >= 0 et N2 > 0)';
  else
    echo 'Un autre cas de figure.';

?>
« ! »

L’opérateur « ! » a pour effet d’inverser le résultat de la condition. Si la condition était vraie, elle devient fausse, et vice-versa.

« ! » Exemple :
<?php

  $nombre = rand(-1, 1);

  if (!($nombre > 0))
    echo 'Le nombre est négatif ou nul';
  else if (!($nombre < 0))
    echo 'Le nombre est positif ou nul';
  else
    echo 'Le nombre est nul';

?>
Le switch

Outre les conditions, il existe une autre façons de programmer un embranchement conditionnel, le « switch …  case ». Apprenons-en un peu plus en regardant un exemple. Imaginons que nous jetons un dé de 6 faces, et que suivant le chiffre tiré, une action doit être effectuée. Par exemple, avancez de 2 cases sur le plateau lorsque vous avez fait un 3, et gagner en puissance d’attaque lorsqu’on a fait un 6. On va faire ça en texte, comme tout bon rôliste se respecte.

Exemple Switch Case :
<?php

  $dice = rand(1, 6);
  
  echo 'Vous avez tiré un ' . $dice . '!<br>';
    
  switch($dice)
  {
    case 1:
      echo 'Vous perdez 1 point en armure.';
      break;
    
    case 2:
      echo 'Vous devez reculer votre personnage d\'1 case.';
      break;
    
    case 3:
      echo 'Vous pouvez avancer votre personnage de 2 cases.';
      break;
    
    case 4:
    case 5:
      echo 'Vous perdez ' . $dice . ' points de santé.';
      break;
    
    case 6:
      echo 'Votre puissance d\'attaque augmente de 5!';
      break;

    default:
      echo 'Jamais appelé';
  }

?>
Alternative d’écriture :
<?php

  $dice = rand(1, 6);
  
  echo 'Vous avez tiré un ' . $dice . '!<br>';
    
  switch($dice):

    case 1:
      echo 'Vous perdez 1 point en armure.';
      break;
    
    case 2:
      echo 'Vous devez reculer votre personnage d\'1 case.';
      break;
    
    case 3:
      echo 'Vous pouvez avancer votre personnage de 2 cases.';
      break;
    
    case 4:
    case 5:
      echo 'Vous perdez ' . $dice . ' points de santé.';
      break;
    
    case 6:
      echo 'Votre puissance d\'attaque augmente de 5!';
      break;

    default:
      echo 'Jamais appelé';

  endswitch;

?>

Comme vous pouvez le constater en testant les codes ci-dessus, qui sont strictement identique, on a pu définir des cas bien précis pour chaque valeur du dé. Pour chaque cas, nous avons le mot clé « case », suivi de la valeur a tester, suivit ensuite d’un double-points (un point-virgule est utilisable à la place du double-points, mais je vous déconseille fortement ce genre d’écriture exotique, sous peine de ne pas vous y retrouver si vous programmez dans plusieurs langages différents). Suivent ensuite une liste d’instructions, et terminées par l’instruction « break » pour « casser » et sortir du branchement conditionnel. Vous remarquerez que j’ai utilisé le cas « 4 » vide, permettant ainsi de passer au cas « 5 » lorsque le cas « 4 » est validé. L’étiquette et mot-clé « default » ne sera ici jamais appelé, car tous les cas du switch ont été pourvu, cependant, sachez qu’il existe pour éviter des bogues entre autres choses. Si je souhaitais augmenter le nombre de faces du dé, il serait alors judicieux de placer un code dans le cas « default », qui pourrait permettre, par exemple, d’effectuer une action par défaut, quelque soit la valeur tirée.

Notez aussi l’utilisation d’accolades obligatoires dans le premier cas, et aucune accolade dans le second. Nous avons ici la même règle que pour les conditions.

Conclusion

Vous savez désormais utiliser des embranchements conditionnels en PHP. Sachez que vous pouvez les imbriquer les un dans les autres, et que l’on peut utiliser plusieurs fois les opérateurs booléens dans une même condition. Utilisez des parenthèses dans des conditions complexes pour agir sur les priorités, comme en mathématiques. Pensez aussi à bien respecter les accolades, et tout devrait bien se passer. Vous avez aussi vu comment utiliser la fonction PHP rand(), qui peut se révéler utile.

Prochain chapitre : les boucles.

103 thoughts on “PHP – Les embranchements conditionnels”

  1. I think this is among the such a lot important information for
    me. And i’m happy reading your article. However wanna observation on some basic things, The
    website style is ideal, the articles is actually great : D.
    Good process, cheers

  2. Hi there, I found your website by means of Google at the same time as
    looking for a similar topic, your site came up, it seems good.

    I’ve bookmarked it in my google bookmarks.
    Hello there, just became alert to your blog thru Google, and
    located that it is really informative. I am going to be careful for brussels.
    I will appreciate for those who continue this in future.
    Many other people might be benefited from your writing.
    Cheers!

  3. Thank you, I’ve just been looking for information approximately this subject for a long time and yours is the
    greatest I have found out till now. But, what
    concerning the conclusion? Are you certain in regards to the supply?

  4. When I originally left a comment I appear to
    have clicked the -Notify me when new comments are added- checkbox and now every time a comment is added
    I recieve four emails with the same comment.
    Is there a means you are able to remove me from that service?

    Cheers!

  5. Unquestionably consider that that you stated. Your favourite reason appeared to be on the web the easiest thing to bear in mind of.
    I say to you, I definitely get annoyed even as other folks think about worries
    that they just don’t recognize about. You controlled to hit the nail upon the highest as well as defined out
    the whole thing without having side-effects , people could take a signal.
    Will probably be again to get more. Thanks

  6. Do you mind if I quote a couple of your articles as long
    as I provide credit and sources back to your blog?
    My website is in the exact same area of interest as yours
    and my visitors would truly benefit from
    some of the information you present here. Please let me know if this
    ok with you. Cheers!

    My page – cbd gummies

  7. Hello, Neat post. There’s a problem together with your site in internet
    explorer, could check this? IE nonetheless is the marketplace
    chief and a large part of other people will miss your excellent
    writing because of this problem.

    My blog: cbd gummies

  8. Greetings from Florida! I’m bored to death at work so I decided to
    browse your website on my iphone during lunch break.
    I enjoy the information you provide here and can’t wait to take a look when I get home.

    I’m amazed at how fast your blog loaded on my cell phone ..
    I’m not even using WIFI, just 3G .. Anyhow, very good blog!

    my homepage – CBD gummies for sleep

  9. I loved as much as you’ll receive carried out right here.
    The sketch is tasteful, your authored subject matter stylish.
    nonetheless, you command get got an edginess over
    that you wish be delivering the following. unwell unquestionably come further formerly again as exactly the same nearly very often inside case you shield this hike.

    Here is my page :: delta-8-THC

  10. I loved as much as you will receive carried out right here.
    The sketch is tasteful, your authored subject matter stylish.
    nonetheless, you command get bought an shakiness over that you
    wish be delivering the following. unwell unquestionably come more formerly again since exactly
    the same nearly very often inside case you shield this increase.

    Look into my website: CBD gummies for sleep

  11. First off I would like to say wonderful blog! I had a quick question in which I’d like to ask
    if you don’t mind. I was curious to find out how you center yourself and clear your head prior to writing.

    I have had a hard time clearing my thoughts in getting my thoughts out.

    I do enjoy writing but it just seems like the first 10 to 15 minutes tend to
    be wasted simply just trying to figure out how to begin. Any
    recommendations or hints? Appreciate it!

    Here is my blog :: cbd products

  12. certainly like your web site however you need to check the spelling on several of
    your posts. A number of them are rife with spelling problems
    and I in finding it very bothersome to tell the truth on the other hand
    I will surely come back again.

    Take a look at my blog: delta 8

  13. I do consider all the ideas you’ve introduced to your post.

    They’re really convincing and will definitely work. Still, the posts are too quick for newbies.
    Could you please lengthen them a bit from next time? Thank
    you for the post.

    My web-site … cbd gummies

  14. Woah! I’m really enjoying the template/theme of this site.
    It’s simple, yet effective. A lot of times it’s very difficult to get that « perfect balance » between user friendliness and visual appeal.
    I must say you’ve done a superb job with this.
    Additionally, the blog loads very quick for me on Internet explorer.
    Excellent Blog!

    Here is my website … CBD gummies for pain

  15. Great goods from you, man. I have understand your stuff previous to and you’re just extremely excellent.
    I really like what you’ve acquired here, certainly like what you are stating and the way in which you say it.
    You make it entertaining and you still take care of to keep it smart.

    I can’t wait to read much more from you. This is really a great website.

    Check out my web page: cbd for sale

  16. Hi just wanted to give you a quick heads up and let you
    know a few of the images aren’t loading properly. I’m not sure
    why but I think its a linking issue. I’ve tried it in two
    different browsers and both show the same outcome.

    my web blog – delta 8

  17. I am extremely impressed with your writing skills and also with the layout on your blog.

    Is this a paid theme or did you customize it yourself?
    Anyway keep up the excellent quality writing, it is rare to
    see a great blog like this one today.

    my web site; cbd

  18. Do you have a spam problem on this blog; I also am a blogger,
    and I was wondering your situation; we have developed some nice practices and we are
    looking to trade solutions with others, please shoot me an email if interested.

    Here is my web site :: best delta 8

  19. Simply desire to say your article is as astonishing.

    The clearness on your submit is simply cool and i can suppose you’re
    knowledgeable in this subject. Well together with your permission allow me to grab your RSS feed to
    keep updated with imminent post. Thanks one million and please keep up the gratifying work.

    My web blog: slot online

  20. Hmm it seems like your website ate my first comment
    (it was super long) so I guess I’ll just sum it up what I submitted and say,
    I’m thoroughly enjoying your blog. I too am an aspiring blog blogger but I’m still new
    to everything. Do you have any recommendations for beginner blog writers?

    I’d genuinely appreciate it.

    Review my web site – delta 8 gummies

  21. Hi there, I found your website via Google even as searching for a similar subject,
    your site came up, it appears good. I have bookmarked it in my google bookmarks.

    Hello there, just changed into alert to your weblog via Google, and located that it’s truly
    informative. I’m gonna watch out for brussels. I’ll appreciate when you proceed this in future.
    Numerous people will likely be benefited from your writing.

    Cheers!

    My web page; buy followers (http://www.usmagazine.com)

  22. Hey there! Someone in my Myspace group shared this website
    with us so I came to look it over. I’m definitely loving the
    information. I’m bookmarking and will be tweeting this to my
    followers! Excellent blog and wonderful design.

    Feel free to surf to my blog post: buy weed

  23. Please let me know if you’re looking for a author for your blog.
    You have some really great articles and I think I would be a good
    asset. If you ever want to take some of the load off, I’d really like to write some material
    for your blog in exchange for a link back to mine. Please send me
    an e-mail if interested. Many thanks!

    Here is my homepage: pain medication dogs

  24. May I simply just say what a relief to find an individual
    who genuinely understands what they are discussing on the net.
    You actually know how to bring an issue to light and make it important.
    More people really need to check this out and
    understand this side of the story. I can’t believe you’re not more popular because you definitely have the gift.

    Feel free to visit my homepage; best kratom

  25. Having read this I thought it was really enlightening. I appreciate you finding the time and effort to put this
    informative article together. I once again find myself spending way too
    much time both reading and posting comments. But so what, it
    was still worth it!

    Have a look at my blog post cbd for sale

  26. Hey! I know this is somewhat off topic but I was wondering which blog
    platform are you using for this website? I’m getting fed up of WordPress because I’ve had issues with hackers and I’m looking at options for another platform.
    I would be fantastic if you could point me in the direction of a good platform.

    Here is my web site: delta 8 thc carts

Répondre à delta 8 gummies Annuler la réponse.

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *