Welches ist die bessere und schnellste Methode: wenn oder wechseln Sie?
if(x==1){
echo "hi";
} else if (x==2){
echo "bye";
}
switch(x){
case 1
...
break;
default;
}
Ihr erstes Beispiel ist einfach falsch. Sie brauchen elseif
statt nur else
.
Wenn Sie if..elseif...
oder switch
verwenden, ist dies in erster Linie eine Vorzugssache. Die Leistung ist die gleiche.
Wenn jedoch alle Ihre Bedingungen vom Typ x == value
sind, wobei x
in jeder Bedingung gleich ist, ist switch
normalerweise sinnvoll. Ich würde auch nur switch
verwenden, wenn mehr als z. zwei Bedingungen.
Ein Fall, in dem switch
Ihnen tatsächlich einen Leistungsvorteil verschafft, ist, wenn der variable Teil ein Funktionsaufruf ist:
switch(some_func()) {
case 1: ... break;
case 2: ... break;
}
Dann wird some_func()
nur einmal mit aufgerufen
if(some_func() == 1) {}
elseif(some_func() == 2) {}
es würde zweimal aufgerufen werden - einschließlich möglicher Nebenwirkungen des zweimaligen Funktionsaufrufs. Sie können jedoch immer $res = some_func();
und dann $res
in Ihren if
-Bedingungen verwenden - so können Sie dieses Problem gemeinsam vermeiden.
In einem Fall, in dem Sie nicht verwenden können, gibt es komplexere Bedingungen - switch
funktioniert nur für x == y
, wobei y
ein konstanter Wert ist.
Laut phpbench.com ist if/elseif etwas schneller, insbesondere bei Verwendung eines strengen Vergleichs (===).
Aber es ist nur wirklich wichtig, wenn Sie Mikrosekunden für eine Funktion abtasten möchten, die tausendmal aufgerufen wird.
Allgemeine Regel ist verwenden Sie switch
, wenn die Anzahl der Bedingungen größer als 3 ist} (zur besseren Lesbarkeit).
if
else if
/else
ist flexibler (daher besser), aber switch
ist etwas schneller, da sie die Bedingung nur einmal berechnet und dann die Ausgabe prüft, während if
dies jedes Mal tun muss.
_/EDIT: Anscheinend ist switch
LANGSAMER ALS if
Immerhin konnte ich schwören, dass dies nicht der Fall war ...
Es hängt von der Nutzung ab. Wenn Sie den fxp-Status (online, away, dnd, offline ...) haben, sollten Sie ihn besser verwenden.
switch(status)
{
case 'online':
...
}
Aber wenn Sie so etwas wollen
if ((last_reply.ContainsKey(name)) && (last_reply[name] < little_ago))
oder
if (msg.ToString()[0] == '!')
es ist besser, wenn sonst.
Bei Verwendung von ==
ist die Leistung von if ... elseif
im Vergleich zu switch
nahezu identisch. Bei Verwendung von ===
ist if ... elseif
jedoch etwa dreimal schneller (gemäß: phpbench ).
Im Allgemeinen sollten Sie sich für das Lesbarste entscheiden und switch
verwenden, wenn Sie mehr als 3 Vergleiche durchführen. Wenn die Leistung ein großes Problem darstellt und Sie keine Typkonvertierungen vornehmen müssen, verwenden Sie if ... elseif
mit ===
.
meiner Meinung nach ist das "if/else" schneller, aber nicht besser als wechseln.
echo ($x==1?"hi":($x==2?"bye":""));
wenn Sie 1,2 Fälle wie if/else if/else machen müssen
Ich glaube, der Compiler wird sie am Ende des Tages in einen sehr ähnlichen oder sogar identischen Code verwandeln.
Versuchen Sie nicht, die Optimierung für den Compiler durchzuführen, es sei denn, Sie machen etwas Seltsames.
Außerdem ist die Entwicklerzeit generell wichtiger als die Laufzeit (mit Ausnahme von Spielen). Daher ist es besser, sie lesbarer und wartbarer zu machen.