Page 1 sur 1

difference entre if,elseif et switch

Posté : 15 avr. 2008, 15:56
par hakazizi
Jai récupere ses exemple dans le tuto pour illustrer ma question
qu'elle difference y a t-il entre les deux car il y a autant de ligne sur l'un que sur l'autre.
<?php
if ($i == 0) {
    echo "i égale 0";
} elseif ($i == 1) {
    echo "i égale 1";
} elseif ($i == 2) {
    echo "i égale 2";
}
?> 
<?php
switch ($i) {
case 0:
    echo "i égale 0";
    break;
case 1:
    echo "i égale 1";
    break;
case 2:
    echo "i égale 2";
    break;
}
?> 

Posté : 15 avr. 2008, 16:42
par caroube
La différence, c'est que le switch travaille sur la même variable tandis que le if elseif travaille sur des variables différentes (il peut faire sur la même variable parce qui peut le plus peut le moins)
if ($jour == lundi) {
  echo "Au boulot !";
} elseif ($mois == "janvier") {
  echo "Bonne Année !";
} elseif ($temperature == 40) {
  echo "Attention canicule !";
}
Sur le switch, il est également possible de tester plusieurs valeurs :
switch ($i) { 
case 0: 
    echo "i égale 0"; 
    break; 
case 1: 
    echo "i égale 1"; 
    break; 
case 2: 
case 3: 
    echo "i égale 2 ou 3"; 
    break; 
default:
  echo "i égale le reste"
  break;
} 
Par contre, tu ne pourras pas tester d'intervalle avec switch et dans ce cas, il faut utiliser if ... elseif
if ($i < 0) {
  echo "i negatif";
} elseif ($i <10) {
  echo "i inférieur à 10";
} elseif ($i ==11) {
  echo "i égale à 11";
} else {
  echo "i supérieur à 11";
}
Mais dans ce cas, attention à l'ordre de test.
if ($i < 10) {
  echo "i inférieur à 10";
} elseif ($i < 0) {
  echo "i negatif"; //Branche morte ...
} elseif ($i ==11) {
  echo "i égale à 11";
} else {
  echo "i supérieur à 11";
}

Posté : 15 avr. 2008, 16:45
par Berzemus
je préfère le switch moi..

Posté : 15 avr. 2008, 16:51
par caroube
je préfère le switch moi..
Quand on peut, oui ... Pour de la lisibilité et de la maintenabilité : si tu décides que la variable $i doit maintenant s'appeler $unautrenom, la correction sera plus facile à effectuer et moins sujette à erreur de frappe.

Maintenant, il y a des cas où on ne peut pas utiliser switch et là, faut bien passer par if ... elseif ...