Lo que veo es que usted está mezclando hasta las dos formas posibles de construir una construcción 'if' en php.
La primera forma es o bien:
if (condition) instruction;
if (condition) { more; than; one; instructions; }
El segundo es:
if (condition): instruction; another; endif;
Cuando se escribe
<?php if (condition) ?>
... y sin un '{' o un " : 'antes del cierre'?> 'etiqueta, de hecho está truncando el comando if omitiendo las instrucciones, y PHP lo acepta. Cuando vuelva a abrir la etiqueta php, ya estará fuera del if.
Lo mismo NO se aplica si simplemente "olvida" las instrucciones en un solo bloque, donde un 'endif;' no está permitido como una instrucción;
Así:
<?php if (condition) ?>
anything outside the if
<?php instruction_outside_the_if; ?>
... no tiene sentido (porque elaborar un caso, pero no hace nada después de él), pero no es un error estricta.
<?php if (condition 1): ?> <!-- note the ':' in this if -->
<?php if (condition 2) ?>
anything outside the second if but inside the first
<?php endif; ?> <!-- this closes the first if
... aquí se tiene una primera si funciona, pero el segundo es aún vacía.
<?php if (condition 1): ?> <!-- note the ':' in this if -->
<?php if (condition 2) ?>
anything outside the second if but inside the first
<?php else: ?>
still outside the second if but inside the first, in the ELSE part
<?php endif; ?> <!-- this closes the first if
... esto es más o menos como su ejemplo, cuando la persona (o elseif) pertenece al primer caso.
<?php if (true) ?>
<?php elseif(foo){ }; ?>
Esa es otra excepción, ya que no está poniendo nada entre una etiqueta de cierre y la etiqueta de apertura, por lo que el analizador "optimiza" hacia fuera (no es exactamente así, pero es una aproximación correcta) . Trate de poner nada entre las dos etiquetas php, como:
<?php if (true) ?>
anything
<?php elseif(foo){ }; ?>
...y ver aparecer el "error de sintaxis, inesperado T_ELSEIF".
Rechazo que esto sea válido. ¿Lo has ejecutado con éxito? Errores en y todo? –
@Kerrek SB - Sí, lo probé. Es válido, no tengo idea de por qué. –
@cwolves: Yo también lo hice, y obtuve 'Parse error: error de sintaxis, inesperado T_ELSEIF' ... Déjame probar tu nuevo ejemplo. Además, ¿puedes convertirlo en código real, por favor, no pseudocódigo? –