2010-11-22 3 views
19

Ich bin in einem Dilemma. Was ist am besten zu benutzen und warum .. oder wechseln?Switch vs wenn Aussagen

switch ($x) 
{ 
case 1: 
    //mysql query 
    //echo something 
    break; 
case 2: 
    //mysql query 
    //echo something 
    break; 
} 

...

if ($x == 1) { 
    //mysql query 
    //echo something  
} 

if ($x == 2) { 
    //mysql query 
    //echo something 
} 
+6

möglich Duplikat von [ist "sonst if" schneller als "switch() case"?] (Http://stackoverflow.com/questions/767821/is-else-if-faster-than-switch-case) (Sprache in dieser Frage ist C#, aber switch/case und if-Anweisungen verhalten sich im Allgemeinen in PHP gleich) – BoltClock

Antwort

30

Sie haben unterschiedliche Bedeutungen.

Das erste Beispiel wird beendet, wenn die Bedingung erfüllt ist.

Die zweite wird $x zweimal testen.

Sie können Ihre zweite if eine else if machen. Dies bedeutet, dass der Block übersprungen wird, sobald eine Bedingung wahr auswertet.

Aber wenn Sie sich fragen, welche ist am schnellsten, sollten Sie stattdessen denken, , die am effektivsten kommuniziert, was ich tun möchte. Beide werden höchstwahrscheinlich als bedingte Sprünge in der Zielarchitektur enden.

Vorzeitige Optimierung ... (Sie kennen den Rest: P)

+0

Natürlich, es sei denn, die zweite if-Anweisung ist ein else if. – BoltClock

+0

Sie machen einen guten Punkt vor allem mit meinem breiten Beispiel! Dafür stimme ich deine Antwort richtig :) – CyberJunkie

5

Erste, was Sie haben, ist nicht das gleiche

switch(value) 
    case condition1: 
    break; 
    case condition2: 
    break 

if (condition1) { 
} 
if (condition2) { 
} 

Diese sind auch

switch(value) 
    case condition1: 
    break; 
    case condition2: 
    break 

if (condition1) { 
} 
else if (condition2) { 
} 

Zweitens, wenn Sie über meine zweite e sprechen Beispiel, wo die beiden synonym sind. Dann mit switch Anweisungen können einige Schmerzen in der Codierung Lose if ..else if Aussagen zu erleichtern ....

Schalter in meiner Sicht kann auch ein bisschen mehr Lesbarkeit bieten. Aber selbst dann gibt es Zeiten, in denen die Verwendung von if...else einfach besser ist, besonders bei komplexer Logik.

+1

Guter Vergleich! Vielen Dank! – CyberJunkie

+0

+1 für * es gibt Zeit bei der Verwendung von 'if ... else' ist einfach besser * ... Ich finde mich immer mit if-Anweisungen mit booleans, wie es einfacher Fluss bietet. –

7

Switch ist besser, wenn es mehr als zwei Möglichkeiten gibt. Es ist hauptsächlich für Code Lesbarkeit und Wartbarkeit und nicht Leistung.

Wie andere gezeigt haben, sind Ihre Beispiele jedoch nicht gleichwertig.

1

Wenn Sie eine einzelne Variable, eine Reihe möglicher Werte haben und für jeden Wert verschiedene Aktionen ausführen möchten, ist dies der Fall.

Switch-Anweisungen machen es offensichtlicher, dass Sie nur bestimmen, welche der erlaubten Werte einer Variablen hatte.

Wenn Sie komplexere Bedingungen oder mehrere zu berücksichtigende Variablen haben, verwenden Sie if-Anweisungen.

5

Die switch-Anweisung wird schneller, da sie den Wert nur einmal überprüft.

1

beide der Aussage sind Entscheidungsfindung durch den Vergleich einer Art der Parameter und zeigen dann die Ergebnisse.Die switch-Anweisung ist ohne Zweifel schneller als die if-Anweisung, aber die if-Anweisung hat einen größeren Vorteil gegenüber der switch-Anweisung, wenn Sie logische Operationen wie (<,>, < =,> =,! =, ==) verwenden müssen. . Wann immer Sie mit den logischen Operationen konfrontiert wurden, werden Sie mit der switch-Anweisung ausgeschlossen. Aber keine Sorge, es gibt noch einen anderen Weg, um Ihr Ziel zu erreichen, nämlich if-statement oder if-else oder if-else-if Erklärung. Ich schlage vor, dass Sie die meiste Zeit lieber if-else verwenden als den Schalter.