¿Son "elseif" y "else if" completamente sinónimos?

170

Son elseify else ifcompletamente sinónimo, o hay una diferencia?

¿Zend tiene un "estándar" aceptado sobre cuál usar?

Si bien personalmente no me gusta ver elseifel código, solo necesito saber si son sinónimos y el manual de PHP no es el más fácil de buscar.

Theodore R. Smith
fuente
10
No todos los demás lenguajes else if, por cierto. Por ejemplo, VB también usa ElseIfy usa Ruby elsif.
Daniel Vandersluis
66
y shell / bash usa elif
knittl
77
python también usa elif
gregghz

Respuestas:

218

Del manual de PHP :

En PHP, también puede escribir 'else if' (en dos palabras) y el comportamiento sería idéntico al de 'elseif' (en una sola palabra). El significado sintáctico es ligeramente diferente (si está familiarizado con C, este es el mismo comportamiento) pero la conclusión es que ambos darían como resultado exactamente el mismo comportamiento.

Esencialmente, se comportarán igual, pero else ifes técnicamente equivalente a una estructura anidada como esta:

if (first_condition)
{

}
else
{
  if (second_condition)
  {

  }
}

El manual también señala:

Tenga en cuenta que elseif y else if solo se considerarán exactamente iguales cuando se usan llaves como en el ejemplo anterior. Cuando use dos puntos para definir sus condiciones if / elseif, no debe separar else if en dos palabras, o PHP fallará con un error de análisis.

Lo que significa que en la forma de estructura de control normal (es decir, usando llaves):

if (first_condition)
{

}
elseif (second_condition)
{

}

ya sea elseifo else ifpuede ser utilizado. Sin embargo, si usa la sintaxis alternativa , debe usar elseif:

if (first_condition):
  // ...
elseif (second_condition):
  // ...
endif;
Daniel Vandersluis
fuente
18
Buen trabajo con los fragmentos de ejemplo. En todo caso, la sintaxis alternativa es todo lo que se necesita para demostrar que PHP simplemente trata else ifcomo else { if {.
BoltClock
2
PHP no trata else ifcomo else { if {, de lo contrario no podría hacerlo if (0) { } else if (0) { } else { }...
Guido Hendriks
44
@GuidoHendriks: no es que uno sea tratado como el otro, es que son funcionalmente equivalentes. Su ejemplo es equivalente a la forma anidada if (0) { } else { if (0) { } else { } }. Tenga en cuenta que no hay ambigüedad en el último elsebloque, que siempre es el caso para las ramas completas (cada ifuna tiene un else).
Outis
Aquí hay otro ejemplo de referencia php.net/manual/en/control-structures.elseif.php#115851
WhyAyala
Con synyax alternativo solo tiene que recordar 'colon' y endif de inner if: if ($v1='1'): do_thing(); else: if($v1='b' ): do_another_thing(); else: do_smthing_else(); endif; endif; es el equivalente de; if ($v1='1'): do_thing(); elseif($v1='b' ): do_another_thing(); else: do_smthing_else(); endif;
DDS
47

El Framework Interoperability Group (FIG), que está formado por miembros que incluyen a los desarrolladores de Zend ( https://github.com/php-fig/fig-standards#voting-members ), reunió una serie de recomendaciones estándar (PSR) - #).

Zend2 y Symfony2 ya siguen a PSR-0.

No hay reglas duras y rápidas para los estilos, pero puedes probar y seguir tanto PSR-2 como puedas.

Hay un comentario sobre else if vs elseif en PSR-2:

La palabra clave elseif DEBE usarse en lugar de else si es así para que todas las palabras clave de control se vean como palabras sueltas.

https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md#51-if-elseif-else

Algunas de las recomendaciones son solo eso, recomendaciones. Depende de usted si debe usar else if o elseif

James Cowhen
fuente
44
Muchas gracias por señalar las pautas de palabras clave como una palabra.
Theodore R. Smith