PHP débutant - Tests conditionnels - If - Else if - Else

PHP débutant - Tests conditionnels - If - Else if - Else

Le If - Else if - Else est le test conditionnel le plus élaboré, littéralement il se traduit par : si - sinon si -. Ce test va nous permettre de jongler avec nos conditions de manière souple et impitoyable. Restons le maitre des conditions que nous voulons nous imposer sur le bon déroulement des scripts.

Sommaire :

PHP débutant - Tests conditionnels - If - Else if - Else

If - Else if - Else
La structure if-else, comme nous l'avons vu dans le tutoriel précédant, permet d'effectuer deux actions: L'une en cas de validité du test et l'autre dans le cas contraire. Nous allons complexifier un petit peu tout ça mais pas trop, rassurez-vous, en étudiant la structure if-else if-else, qui permet plusieurs tests. Comme pour les deux autres structures, présentons la pour commencer en français:

si ( condition1 )
action 1 ;
sinon si ( condition 2 )
action 2 ;
sinon si ( condition 3 )
action 3;
sinon
action par défaut;

L'exécution se fait de la manière suivante: si condition 1 est vérifiée, action 1 est exécutée; sinon, si condition 2 est vérifiée, action 2 est exécutée; idem pour condition 3; pour terminer, si aucune des 3 conditions n'a été vérifié, l'action par défaut est exécutée.

Dans cette structure, ce qui est très utile, c'est que le nombre de 'else if' n'est pas limité, vous pouvez en mettre autant que vous voulez!

Voyons un exemple :

.01
.02
.03
.04
.05
.06
.07
.08
.09
.10
.11
.12
.13
 
<?php
if( $age < 14 ) // $si $age plus petit que < 14
 
echo 'Vous avez moins de 14 ans';
else if(
$age <= 18 ) // sinon, si $age plus petit ou égal à 18
 
echo 'Vous avez entre 14 et 18 ans';
else if(
$age <= 25 ) // sinon, si $age plus petit ou égal à 25
 
echo 'Vous avez entre 19 et 25 ans';
else if(
$age <= 64 ) // sinon, si $age plus petit ou égal à 64
 
echo 'Vous avez entre 26 et 64 ans';
else
// sinon
 
echo 'Vous avez plus de 64 ans!';
?>


La remarque que j'avais faite par rapport à la différence entre la vitesse d'exécution de deux if et d'un if-else est valable ici: si la validité d'un test est vérifiée, tous les tests suivants ne seront pas effectués.
Combinaisons de conditions ( && et || )
Dans tous les tests que nous avons faits, nous n'avons vérifié qu'une seule condition, mais il est possible d'en combiner plusieurs à l'aide des opérateurs && et || qui représentent, respectivement, ET et OU.
Voir le tutoriel sur les opérateurs
Ainsi, si l'on veut vérifier si la valeur de la variable $age est plus grande ou égal à 18 mais plus petite que 25, nous pouvons faire le test comme ceci:
.01
.02
.03
.04
.05
 
<?php
if( $age >= 18 && $age < 25 ) // si( $age plus grand que 18 ET $age plus petit que 25 )
 
echo 'Vous avez entre 18 et 24 ans';
?>


L'opérateur traduisant le OU fonctionne de la même manière:
.01
.02
.03
.04
.05
 
<?php
if( $age == 18 || $age == 19 ) // si $age est égal à 18 OU si $age est égal à 19
 
echo 'Vous avez 18 ou 19 ans';
?>


Remarquez qu'on aurait aussi pu écrire :
.01
.02
.03
.04
.05
.06
 
<?php
if( $age >= 18 && $age <= 19 )
// si $age est plus grand ou égal à 18 ET si $age plus petit ou égal à 19
 
echo 'Vous avez 18 ou 19 ans';
?>


Il est possible de combiner les deux opérateur d'infinies façons, en voici une de plus (les parenthèses permettent de définir la hiérarchie des tests):
.01
.02
.03
.04
.05
 
<?php
if( $age == 18 || ( $age >= 25 && $age <= 30 ) )
  echo
'Vous avez 18 ans ou bien votre age est compris entre 25 et 30 ans...';
?>




Imbrications de tests
Il est tout à fait possible d'imbriquer les tests, c'est à dire de mettre un test dans un autre :
.01
.02
.03
.04
.05
.06
.07
.08
.09
.10
.11
.12
.13
.14
.15
.16
.17
.18
.19
.20
 
<?php
$var1
= 5;
$var2 = 10;

if(
$var1 == 5 )
{
  if(
$var2 > 8 )
    echo
'$var1 vaut 5 et $var2 est plus grand que 8';
  else
    echo
'$var1 vaut 5 mais $var2 n\'est pas plus grand que 8';
}
else
{
  if(
$var2 < 10 )
    echo
'$var1 est différent de 5 et $var2 est plus petit que 10';
  else
    echo
'$var1 est différent de 5 et $var2 n\'est pas plus petit que 10';
}
?>