Alain Barraud Mémento informatique  
 
Accueil Logithèque - SE Photo - vidéo Internet - protocoles Site Web PC - Réseau Archives
Page ouverte le 23/02/2010
retour sommaire PHP
Logo PHP

Les conditions


Les conditions sont d'une importance capitale, leur emploi étant inéluctable en PHP.
Les données à afficher sont souvent soumises à condition. Exemple, si c'est le matin, on afficherait "Bonjour", si c'est le soir, "Bonsoir".
Cela permet d'afficher des choses différentes, de rendre le site dynamique.
Sommaire

La structure de base : If… Else

Une condition peut être écrite en PHP sous différentes formes. On parle de structures conditionnelles.

Celle-ci est la principale. Pour étudier la structure If… Else, on suit le plan suivant :
  1. Les symboles à connaître : il faut retenir quelques symboles permettant de faire des comparaisons
  2. La structure If… Else : le plus important, on voit comment fonctionne une condition avec If… Else.
  3. Des conditions multiples : on complique un peu les conditions, on peut utiliser plusieurs conditions à la fois.
  4. Le cas des booléens : il existe une façon particulière d'utiliser les conditions quand on travaille sur des booléens.
  5. L'astuce bonus : un plus.

Les symboles à connaître

Un tableau des symboles susceptibles d'être utilisés
SymboleSignification
==Est égal à
>Est supérieur à
<Est inférieur à
>=Est supérieur ou égal à
<=Est inférieur ou égal à
!=Est différent de
erreur Le double égal (==) sert à tester l'égalité : " si égal à…"
A ne pas confondre avec le simple égal. Dans les conditions, on utilise toujours le double égal (==)

La structure If… Else

Voici ce qu'on doit mettre dans l'ordre pour utiliser une condition :
  • if pour introduire la condition
  • on ajoute entre parenthèses la condition proprement dite.
  • puis on ouvre des accolades qui contiendront les instructions à executer si la condition est remplie
Prenons un exemple :
Code PHP
    <?php
    $age = 8;

    if ($age <= 12)
    {
        echo "salut gamin !";
    }
    ?>
Ici, on demande à PHP : Si la variable est inférieur ou égal à 12, affiche "Salut gamin !"
Là, on travaille sur la variable $age. Si la condition est remplie, on affiche le message, sinon rien.
On va voir pour méliorer cet exemple en affichant un message si l'âge est supérieur à 12 ans
Code PHP
    <?php
    $age = 8;

    if ($age <= 12)   // si l'âge est inférieur ou égal à 12
    {
        echo "salut gamin ! Bienvenue sur mon site !<br />";
        $autorisation_entrer = "Oui";
    }
    else   // sinon
    {
        echo "Désolé, c'est un site pour les enfants. Au revoir !<br />";
        $autorisation_entrer = "Non";
    }

    echo "Avez-vous l'autorisation d'entrer ? La réponse est : $autorisation_entrer";
    ?>
On a rajouté else avec une autre instruction.
Et on a donné une valeur différente à la variable $autorisation_entrer
Le fait d'avoir rajouté une valeur différente à la variable $autorisation_entrer peut servir pour la suite. Exemple :
Code PHP
    <?php
    if ($autorisation_entrer == "Oui")   // si on a l'autorisation d'entrer
    {
        // instructions à exécuter si on a l'autorisation d'entrer
    }
    elseif ($autorisation_entrer == "Non")   // sinon si on n'a pas l'autorisation d'entrer
    {
        // instructions à exécuter si on n'a pas l'autorisation d'entrer
    }
    else   // sinon (la variable ne contient ni Oui ni Non, on ne peut pas agir)
    {
        echo "Euh, je ne connais pas ton âge, peux-tu me le donner s'il te plaît ?";
    }
    ?>
Ici, on utilise elseif qui signifie "sinon si". Dans l'ordre, PHP rencontre les conditions suivantes :
1/ si $autorisation_entrer est égale à "Oui", tu exécute ces instructions…
2/ si $autorisation_entrer est égale à "Non", tu exécute ces autres instructions…
3/ sinon, tu redemandes l'âge pour savoir si autorisation d'entrer ou pas.
alt Au départ, une variable ne contient rien. Sa valeur est vide, on dit qu'elle vaut NULL.
Pour vérifier si la variable est vide, on peut taper : if ($variable == NULL)…

Le cas des booléens

Si on reprend le dernier code source (avec $autorisation_entrer), il serait plus adapté d'utiliser des booléens.
Ce sont des variables qui valent soit true, soit false, ce qui est particulièrement utile. Voici comment on teste une variable booléenne :
Code PHP
    <?php
    if ($autorisation_entrer == true)
    {
        echo "Bienvenue cher ami :o)";
    }
    elseif ($autorisation_entrer == false)
    {
        echo "T'as pas le droit d'entrer !";
    }
    ?>
Mais un des avantages des booléens, c'est qu'ils sont particulièrement adaptés aux conditions : on n'est pas obligé d'ajouter == true.
Quand on travaille sur une variable booléenne, PHP comprend parfaitement :
Code PHP
    <?php
    if ($autorisation_entrer)
    {
        echo "Bienvenue cher ami :o)";
    }
    elseif ($autorisation_entrer)
    {
        echo "T'as pas le droit d'entrer !";
    }
    ?>
PHP comprend qu'il faut vérifier si $autorisation_entrer vaut true
Avantage : c'est plus rapide et plus clair.
En effet, quand on lit la première ligne, ça donne : "si on a l'autorisation d'entrer&hellip"
question Avec cette méthode "courte", comment fait-on si on veut vérifier si le booléen vaut faux ?
Il y a un symbole qui permet de vérifier si la variable vaut false : le point d'exclamation !. On écrit :
Code PHP
    <?php
    if (! $autorisation_entrer)
    {
   
    }
    ?>
C'est une autre façon. On aurait aussi pu mettre if ($autorisation_entrer == false). Mais la méthode "courte" est plus lisible.

Des conditions multiples

Elles sont pratiques. Mais pour donner plusieurs conditions à la fois, on a besoin de nouveaux mots-clés dont voici les principaux :
Mot-cléSignificationSymbole équivalent
ANDEt 
OROu||

Un exemple :
Code PHP
    <?php
    if ($age <= 12 AND $sexe == "garçon")
    {
        echo "Bienvenue sur le site de Captain Mégakill !";
    }
    if ($age <= 12 AND $sexe == "fille")
    {
        echo "C'est pas un site pour les filles ici !";
    }
    ?>
Autre exemple avec OR
Code PHP
    <?php
    if ($sexe == "fille" OR $sexe == "garçon")
    {
        echo "Salut Terrien !";
    }
    else
    {
        echo "Euh, si t'es ni une fille ni un garçon, t'es quoi ?";
    }
    ?>

L'astuce bonus

Avec les conditions, il y a une astuce à connaître.
Les deux codes ci-dessous donnent le même résultat :
Code PHP
    <?php
    if ($variable == 23)
    {
        echo ´Bravo ! Vous avez trouvé le nombre mystère !´;
    }
    ?>
Code PHP
    <?php
    if ($variable == 23)
    {
    ?>
    ´Bravo ! Vous avez trouvé le nombre mystère !´;
    <?php
    }
    ?>
Dans le second exemple, on n'a pas utilisé echo. En effet, il suffit d'ouvrir l'accolage ({), puis de fermer avec la balise php (?>), et on peut mettre tout le texte à afficher que l'on veut en html.
Cela est pratique quand il y a beaucoup de texte à afficher et sans se prendre la tête avec les backslash devant les guillemets (" ou ´).
Penser à refermer l'accolade après, à l'intérieur d'une balise PHP.

Une alternative pratique : Switch

En théorie, les structures à base de ii… elseif… else… suffisent pour traiter n'importe quelle condition.
Mais d'autres structures peuvent faciliter le travail.
Reprenons un exemple :
Code PHP
    <?php
    if ($note == 0)
    {
        echo "Tu es vraiment un zéro !";
    }

    elseif ($note == 5)
    {
        echo "Tu es vraiment un très mauvais";
    }

    elseif ($note == 7)
    {
        echo "Tu es mauvais";
    }

    elseif ($note == 10)
    {
        echo "Tu as pile poil la moyenne";
    }

    elseif ($note == 12)
    {
        echo "Tu es assez bon";
    }

    elseif ($note == 16)
    {
        echo "Excellent travail !";
    }

    else
    {
        echo "Désolé, je n'ai pas de message à afficher pour cette note";
    }

    ?>
C'est long et répétitif
Le même avec switch
Code PHP
    <?php
    $note == 10;

    switch ($note)   // on indique sur quelle variable on travaille
    {
    case 0:   // dans le cas où $note vaut 0
    echo "Tu es vraiment un zéro !";
    break;
    case 5:   // dans le cas où $note vaut 5
    echo "Tu es vraiment un très mauvais";
    break;
    case 7:   // dans le cas où $note vaut 7
    echo "Tu es mauvais";
    break;
    case 10:   // etc etc
    echo "Tu as pile poil la moyenne";
    break;
    case 12:   // etc etc
    echo "Tu es assez bon";
    break;
    case 16:   // etc etc
    echo "Excellent travail !";
    break;
    default
    echo "Désolé, je n'ai pas de message à afficher pour cette note";

    }
    ?>
Il y a moins d'accolades.
case signifie "cas". Dans le switch, on indique au début sur quelle variable on travaille (ici $note)
On dit à PHP : je vais analyser la valeur de $note
On utilise des case pour analyser chaque cas.
Plus besoin de mettre le double égal. Par contre switch ne peut tester que l'égalité.
Ne marche pas avec les autres symboles (< > <= >= !=).
alt Le mot-clé default est l'équivalent de else
Important à savoir avec l'utilisation de switch, si la note est de 10, PHP exécute les instruction jusqu'à 10. Mais contrairement aux elseif, il continue à lire les instructions suivantes.
Pour empêcher cela, on utilise l'instruction break. Cette instruction demande à PHP de sortir du switch. Dès que PHP tombe sur break, il sort des accolades et donc, il ne lit pas les case qui suivent. Pour comprendre qu'elles sont indispensables, il suffit de tester le code précédent sans les break !
question Quand choisir if, et quand choisir switch ?
C'est un problème de clarté

Les ternaires : des conditions condensées

Autre forme de condition, beaucoup moins fréquente. Un ternaire est une condition condenséeacute;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.
Exemple à base de if… else qui met un booléen $majeur à vrai selon l'âge du visiteur :

Code PHP
    <?php
    $age = 24;

    if ($age >= 18)
    {
        $majeur = true;
    }
    else
    {
        $majeur = false;
    }
    ?>
Avec une structure ternaire, la même chose en une ligne
Code PHP
    <?php
    $age = 24;

    $majeur = ($age >= 18) ? true : false;     ?>