2010-08-02 9 views
4

Cela devrait être une question simple. J'ai simple if/else:Quelle est la différence entre if et elseif?

<?php 
    // TOP PICTURE DEFINITIONS 
    if (is_page('english')) { 
     $toppic = 'page1.png'; 
    } 
    if (is_page('aboutus')) { 
     $toppic = 'page1.png'; 
    } 
    if (is_page('newspaper')) { 
     $toppic = 'page1.png'; 
    } 
    else { 
     $toppic = 'page1.png'; 
    } 
?> 

Y at-il une différence de ^^^ à ceci:

<?php 
    // TOP PICTURE DEFINITIONS 
    if (is_page('english')) { 
     $toppic = 'page1.png'; 
    } 
    elseif (is_page('aboutus')) { 
     $toppic = 'page1.png'; 
    } 
    elseif (is_page('newspaper')) { 
     $toppic = 'page1.png'; 
    } 
    else { 
     $toppic = 'page1.png'; 
    } 
?> 

Je dois dire que cela va dans Wordpress. Et jusqu'à présent, j'ai utilisé la première partie (pas d'elseif, juste une série de 'ifs'), et ça marche. J'étais juste curieux de savoir quelle était la différence.

Merci! Amit

+2

Dupe de http://stackoverflow.com/questions/637980/if-else-and-if-elseif ou http://stackoverflow.com/questions/2881560/is-using-if-elseif-elseif-better -Qu'est-ce-qui-utilise-si-si-si ou ...? –

+0

dans votre cas, peu importe lequel vous utilisez, mais si vous avez des fonctions qui vérifient quelque chose, il pourrait être beaucoup plus rapide avec elseif, coze il vérifie seulement jusqu'à ce que quelque chose correspond à la condition – domiSchenk

+0

Merci beaucoup. – Amit

Répondre

16

Oui. Si une condition dans un contrôle if/else est satisfaite, le reste des contrôles sera omis. else if est juste un if imbriqué dans un else!

if (is_page('english')) { // if true, other statements are skipped 
    $toppic = 'page1.png'; 
} 
elseif (is_page('aboutus')) { 
    $toppic = 'page1.png'; 
} 
elseif (is_page('newspaper')) { 
    $toppic = 'page1.png'; 
} 
else { 
    $toppic = 'page1.png'; 
} 

Mais dans une série de if s, tous seront testés.

if (is_page('english')) { 
    $toppic = 'page1.png'; 
} 
if (is_page('aboutus')) { // will be tested no matter what the outcome 
          // of the previous if statement was 
    $toppic = 'page1.png'; 
} 
if (is_page('newspaper')) { // the same here 
    $toppic = 'page1.png'; 
} 
else { 
    $toppic = 'page1.png'; 
} 

Donc, si vous vérifiez une propriété telle que la parité d'un nombre, il est pair ou impair, pourquoi voulez-vous la peine de vérifier d'autres conditions si l'on est satisfait. C'est un gaspillage de ressources. Par conséquent, le code suivant est beaucoup mieux

if(number_is_odd) { 
} 
else { // if it's not odd, it's even for sure 
} 

que

if(number_is_odd) { 
} 

if(!number_is_odd) { 
} 

Parce que les anciens contrôles de la condition une fois alors que ce dernier fait deux fois. La même chose vaut pour les conditions avec plus de deux états.

+0

J'ai compris. Merci de l'avoir rendu plus clair! – Amit

+0

J'ai vu pire exemples dans les guides PHP. Bon travail! – Drew

+0

Bien que ce soit une bonne réponse, pour le cas décrit dans cette question, il devrait être défini comme une instruction 'switch' car chacun des if évalue le même sujet ... – Martin

2

La première méthode vérifie toutes les conditions, qu'elles soient vraies ou fausses.

La seconde méthode vérifie toutes les conditions jusqu'à ce que l'une d'elles soit vraie, puis ignore le reste.

2

Dans votre premier bloc, chaque comparaison dans votre bloc est exécutée. En outre, toppic sera toujours assigné la valeur dans is_page ('journal') ou la valeur dans l'autre déclaration de is_page ('journal'). Cela arrive parce que la dernière instruction if est toujours évaluée. Même si l'une des instructions if précédentes a la valeur true, vous vous retrouverez dans le bloc else. Pour tester cela, essayez ce code ...

<?php 
    // TOP PICTURE DEFINITIONS 
    if (is_page('english')) { 
     $toppic = 'english.png'; 
    } 
    if (is_page('aboutus')) { 
     $toppic = 'aboutus.png'; 
    } 
    if (is_page('newspaper')) { 
     $toppic = 'newspaper.png'; 
    } 
    else { 
     $toppic = 'finalelse.png'; 
    } 
?> 

Vous finirez toujours avec soit 'newspaper.png' ou 'finalelse.png'.

1

La plus grande différence entre les deux est que le tout dernier bloc else sera appelé chaque fois que is_page('newspaper') renvoie la valeur false. Dans ce cas, cela signifie à peu près à chaque fois que le script s'exécute. Dans ce cas, ce n'est pas un gros problème, puisque vous définissez seulement une variable, et c'est la même valeur que tout le reste. Mais, si c'était différent, vous auriez un bug très frustrant à traquer! En outre, si vous utilisez des instructions if distinctes, la condition pour chaque if est évaluée à chaque fois. Encore une fois, dans ce cas, c'est (probablement) pas un gros problème. Mais, si la condition était, disons ...

if(delete_file('foo.png')) { 
    .... 
} 

if(delete_file('bar.png')) { 
    .... 
} 

if(delete_file('baz.png')) { 
    .... 
} 
else { 
    .... 
} 

Eh bien, vous devriez être en mesure de voir où cela va;) Si vous utilisez elseif, il cesse de tenter d'évaluer une fois qu'il est un vrai. Et, l'autre ne sera appelé que si rien d'autre n'est vrai.

2
<?php 
    if (3 > 1) { 
     echo "This will be printed."; 
    } 
    if (3 > 2) { 
     echo "This will be printed too."; 
    } 
    if (3 > 3) { 
     echo "This will NOT be printed."; 
    } 
    else { 
     echo "This WILL be printed."; 
    } 
?> 

mais avec elseif:

<?php 
    if (3 > 1) { 
     echo "This will be printed."; 
    } 
    elseif (3 > 2) { /* This condition will not be evaluated */ 
     echo "This will NOT be printed"; 
       // because it's on the ELSE part of the previous IF 
    } 
    elseif (3 > 3) { /* This condition will not be evaluated either */ 
     echo "This will NOT be printed."; 
    } 
    else { /* This ELSE condition is still part of the first IF clause */ 
     echo "This will NOT be printed."; 
    } 
?> 

vous devez donc utiliser ELSEIF, parce que Toppic sera autrement $ résultat toujours soit 'newspaper.png', Wich doit être juste, ou 'finalelse.png' ce qui pourrait être vrai ou faux, car il écrase les clauses conditionnelles précédentes.

J'espère que vous trouverez cela utile.

1

La réponse est simple:

if(a==1){ 
    b 
} 
elsif(b==1){ 
    c 
} 

égal à

if(a==1){ 
    b 
} 
else{ 
    if(b==1){ 
    c 
    } 
} 

C'est le même que

if(a==1){ 
    b 
} 
if(b==1){ 
    c 
} 

s'il est impossible qu'un == 1 et b = = 1 en même temps. Bien que lorsque les deux instructions if peuvent être vraies, quand b et c peuvent être exécutés. Cela ne serait pas possible si vous utilisez elsif ici, car b == 1 ne serait vérifié que si un! = 1!

0

Utilisez elseif à bon escient peut vous faire gagner beaucoup de temps car l'analyseur n'a pas besoin d'évaluer toutes les conditions.

2

Ce n'est pas toujours une question d'efficacité. Si vous affin quelque chose, il est essentiel d'utiliser else if et non pas seulement if

Disons que nous affin de la variable $computerOn

if ($computerOn == true) { 
    $computerOn = false; 
} 
if ($computerOn == false) { 
    $computerOn = true; 
} 

Dans le cas ci-dessus votre $computerOn sera toujours être true. Si c'est true, il est défini sur false. Après cela, nous vérifions si c'est false, qui doit maintenant être indépendant des conditions initiales, donc il est maintenant défini sur true.

D'autre part le code ci-dessous basculera computerOn $:

if ($computerOn == true) { 
    $computerOn = false; 
} elseif ($computerOn == false) { 
    $computerOn = true; 
} 

Maintenant, nous ne vérifier si $computerOn est false si elle n'a pas été initialement true. D'où nous avons une bascule.

Si les choses deviennent plus compliquées, vous devrez peut-être utiliser plusieurs elseif s. Il est important de reconnaître quand la logique dicte que elseif est un must par rapport à une option.

+1

Aime l'exemple. Je vous remercie – Amit

Questions connexes