difference entre if,elseif et switch

Mammouth du PHP | 558 Messages

15 avr. 2008, 15:56

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;
}
?> 

Eléphant du PHP | 422 Messages

15 avr. 2008, 16:42

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";
}

ViPHP
ViPHP | 4039 Messages

15 avr. 2008, 16:45

je préfère le switch moi..
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Eléphant du PHP | 422 Messages

15 avr. 2008, 16:51

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 ...