2011-01-11 12 views
14

Me preguntaba la diferencia entre elseif y else if.diferencia subyacente entre elseif vs else si

Estaba leyendo the manual que dice que si se usan las llaves {} se tratan igual pero solo elseif funcionan cuando no se usan las llaves.

También otro contribuidor dijo:

Tenga en cuenta que} elseif() {es algo más rápido que} else if() {

y lo respaldó con una prueba de referencia.

A mí me parece que elseif es la verdadera forma de decirlo y decir:

else if() {...} 

es realmente el equivalente de:

else { if() {...} } 

lo que podría explicar por qué es marginalmente más lento.

Estoy acostumbrado a usar else if porque así es como lo hago en otros idiomas también. Realmente no creo que importe la forma en que lo tipee (a menos que no esté usando llaves ... pero creo que siempre es bueno usar aparatos ortopédicos de todas formas). Tenía curiosidad por los detalles subyacentes.

¿Es correcto?

+3

Vea la respuesta a esta pregunta: http://stackoverflow.com/questions/3662412/are-elseif-and-else-if-completely-synonymous No cubre el rendimiento, pero puede * sugerir * que PHP trata 'else if' como' else {if} '. – BoltClock

+0

Esta pregunta es ciertamente una trampa de mi original. –

+2

Posible duplicado de [¿Son "elseif" y "else if" también?] (Http://stackoverflow.com/questions/3662412/are-elseif-and-else-if-completely-synonymous) – Kuttoozz

Respuesta

7

Además de mi comentario, por lo que puedo ver en la fuente de PHP, el único aumento de velocidad es que el analizador de PHP tiene un token especial para elseif, como era de esperar T_ELSEIF. Pero estoy seguro de que el aumento de velocidad no es más que un efecto secundario de permitir elseif en la sintaxis alternativa:

if (cond1): 
    // Do something 
elseif (cond2): 
    // Do something else 
else: 
    // Do something else 
endif; 

similares a Python, que utiliza elif, else if con un espacio no se permitiría sin tener que complicar innecesariamente el código de implementación del analizador (es decir, actuar de forma diferente entre ver dos puntos y la palabra clave if). Por lo tanto, se requieren dos puntos directamente después de else y if, respectivamente, y así es como se estipula la regla de idioma.

Ergo Estoy bastante seguro de que PHP solo trata else if como un bloque condicional en un enunciado singular else.

Si existen diferencias de velocidad en total, acuse la culpa al analizador para la mayoría de ellas.

+0

Y, si no me equivoco, PHP no debería preocuparse por los espacios en absoluto. – Shoe

+0

@Charlie Pigarelli: el espacio en blanco no es un problema, es el hecho de que la sintaxis alternativa de Python y PHP al ver un 'si' en lugar de dos puntos después de' else'. – BoltClock

1

La "diferencia de velocidad" en ese comentario no es estadísticamente significativa. Aparte de else if: sin analizar, no hay diferencia efectiva.

0

En cuanto a la eficiencia, y en base a lo que he estado estudiando durante mucho tiempo. No hay diferencia.

+2

También podría compartir tus resultados para confirmar – Aziz

4

En Manual voy a leer (ver nota):

Nota: Tenga en cuenta que elseif y else if sólo será considerada exactamente la misma al usar llaves como en el ejemplo anterior. Al usar un dos puntos para definir las condiciones if/elseif, no debe separar else si está en dos palabras, o PHP fallará con un error de análisis.

Ejemplo:

<?php 

/* Incorrect Method: */ 
if($a > $b): 
    echo $a." is greater than ".$b; 
else if($a == $b): // Will not compile. 
    echo "The above line causes a parse error."; 
endif; 


/* Correct Method: */ 
if($a > $b): 
    echo $a." is greater than ".$b; 
elseif($a == $b): // Note the combination of the words. 
    echo $a." equals ".$b; 
else: 
    echo $a." is neither greater than or equal to ".$b; 
endif; 

?> 
Cuestiones relacionadas