2010-11-22 24 views
19

Estoy en un dilema. ¿Qué es mejor usar y por qué ... cambiar o si?Switch vs if declaraciones

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

posible duplicado de [¿es "else if" más rápido que "switch() case"?] (Http://stackoverflow.com/questions/767821/is-else-if-faster-than-switch-case) (el lenguaje en esa pregunta es C# pero switch/case y si las declaraciones generalmente se comportan igual en PHP) – BoltClock

Respuesta

30

tienen significados diferentes.

El primer ejemplo se detendrá cuando se cumpla la condición.

El segundo probará $x dos veces.

Es posible que desee hacer su segundo if un else if. Esto significa que el bloque se omitirá tan pronto como una condición se evalúe como verdadero.

Pero si se está preguntando cuál es el más rápido, en su lugar debe pensar cuál comunica de manera más efectiva lo que quiero hacer. Lo más probable es que ambos terminen como saltos condicionales en la arquitectura de destino.

optimización prematura ... (ya saben el resto: P)

+0

Por supuesto, a menos que la segunda instrucción if sea else else. – BoltClock

+0

¡Haces un buen punto especialmente con mi amplio ejemplo! Por esto, voto tu respuesta correcta :) – CyberJunkie

5

En primer lugar lo que tiene no es lo mismo

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

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

Estos son sinónimos

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

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

Segundo si estás hablando de mi segunda e xample donde los dos son sinónimos. Luego, usando switch las declaraciones pueden aliviar un poco de dolor al codificar muchas declaraciones if ..else if ....

Los cambios en mi punto de vista también pueden proporcionar un poco más de legibilidad. Pero incluso entonces, hay ocasiones en que el uso de if...else es simplemente mejor, especialmente con lógica compleja.

+1

¡Buena comparación! ¡Gracias! – CyberJunkie

+0

+1 por * hay tiempo cuando el uso de 'if ... else' es simplemente mejor * ... Siempre me encuentro usando sentencias if con booleanos, ya que proporciona un flujo más fácil. –

7

El interruptor es mejor cuando hay más de dos opciones. Se trata principalmente de legibilidad de código y mantenimiento en lugar de rendimiento.

Como han señalado otros, sus ejemplos no son equivalentes, sin embargo.

1

Si tiene una sola variable, un conjunto de valores posibles y desea realizar diferentes acciones para cada valor, para eso sirve el interruptor.

Las declaraciones de cambio hacen que sea más obvio que solo está determinando cuál de los valores permitidos tenía una variable.

Si tiene condiciones más complejas, o múltiples variables a considerar, use if-statements.

5

La instrucción de cambio será más rápida porque solo verifica el valor una vez.

1

ambos enunciados son declaraciones de toma de decisiones al comparar algún tipo de parámetro y luego mostrar los resultados.la instrucción switch es sin duda más rápida que la instrucción if, pero la instrucción if tiene una ventaja mayor sobre la instrucción switch que es cuando tienes que usar operaciones lógicas como (<,>, < =,> =,! =, ==) . cada vez que te encuentres con las operaciones lógicas, serás desactivado al usar la declaración de cambio, pero no te preocupes, hay otra manera que se puede usar para alcanzar tu objetivo, es decir if-statement o if-else o if-else-if declaración. Le sugiero que use if-else la mayor parte del tiempo en lugar del interruptor uno.