En este tutorial vamos a ver una forma de representación alternativa al común IF y ELSE que solemos usar en php. En concreto es muy útil cuando realizamos nuestras plantillas combinando php y html.
Estructura de if y else alternativo
La representación alternativa de if y else se basa en reemplazar las llaves de apertura por dos puntos ":" y la llave de cierre por "endif;". Veamos un ejemplo gráfico:
<?php if ( $a < 5 ): echo 'Hola mundo'; endif; ?>
A esta representación podemos además añadirle las sentencias else y else if:
<?php if ( $a < 5 ): echo 'A es menor que 5'; elseif ( $a == 5 ): echo 'A es 5!!'; else: echo 'Por desgracia A es mayor que 5!'; endif; ?>
Como puedes ver su representación es sencilla y, aunque no sigue el estándar de la representación de las estructuras de control, podemos encontrarle ventajas para ciertos usos donde puede quedar confusa la representación más conocida por todos.
If y ElSE alternativo con html
El uso que a priori más me gusta para el uso de este IF y ELSE alternativos no es otro que el desarrollo de nuestras plantillas PHP. Un código es mejor que mil palabras:
<h2> <?php if ( $action == 'profesional' ): ?> Bienvenido a la mejor <strong>web PROFESIONAL de programación</strong> del mundo <?php elseif ( $action == 'amateur' ): ?> Bienveido querido amateur a la <strong>mejor web creada para programadores Amateur del mundo</strong> <?php else: ?> ¡Seas quien seas! <strong>¡Bienvenido a la mejor web del mundo para aprender programación!</strong> <?php endif; ?> #lg;/h2>
Si llevas algo de tiempo en esto (sino ya te lo confirmo yo) te habrás dado cuenta que una llave de cierre en una plantilla con html en ocasiones pasa a ser casi invisible, sobretodo en plantillas con html complejo. Como has podido ver, esta representación es mucho más legible que la común, al menos a lo que combinarla con HTML se refiere.
Respecto a la programación de scripts enteramente escritos en php si que he encontrado que para estudiantes o personas nuevas en el mundillo ver un endif;
es mucho más entendible que una simple llave. Sobretodo si anidamos una y otra vez estas estructuras de control.
Scripts en php con la representación alternativa son más fáciles de entender por programadores noveles o estudiantes.
Comparación if y else
Comparando ambas representaciones encontramos pocas diferencias respecto a lo que ya he mostrado, por otra parte si que me gustaría dejar un ejemplo extra para mayor claridad.
Script php para obtener el mayor de 3 números con if y else
común:
<?php if ( $a > $b ) { if ( $a > $c ) { echo 'El mayor es a'; } else { echo 'El mayor es c'; } } else { if ( $b > $c ) { echo 'El mayor es b'; } else { echo 'El mayor es c'; } } ?>
Script php equivalente con if y else alternativos:
<?php if ( $a > $b ): if ( $a > $c ): echo 'El mayor es a'; else: echo 'El mayor es c'; endif; else: if ( $b > $c ): echo 'El mayor es b'; else: echo 'El mayor es c'; endif; endif; ?>
Extra: Datos a tener en cuenta de IF y ELSE alternativo
Resumiendo, el uso de if y endif es más atractivo por las siguientes razones:
- Tanto si queremos contemplar una línea o varias dentro de la condición del if siempre utilizaremos la misma representación.
- Al combinar PHP y HTML resulta más legible y mucho más fácil de identificar.
- Buscar en una plantilla el cierre de un if será realmente fácil gracias a
endif;
- Evita problemas de confusión para programadores noveles (y no tan noveles) cuando anidamos distintas estructuras de control. Por ejemplo un número grande de IF, WHILE, FOR, etc.
- Representaciones de una línea como
if($a < $b): echo 'Hola'; endif;
se vuelven más sencillas.
Extra: Otras estructuras alternativas
Como dato adicional decir que existen otras estructuras de control con una representación alternativa muy similar al de este IF y ELSE. Entre ellas se encuentran SWITCH, WHILE, FOR, etc.
Representación alternativa SWITCH
<?php switch ( $a ): case 1: echo 'a es 1'; break; endswitch; <?php
Importante no imprimir ningún espacio en blanco entre la sentencia switch y el primer case.
Representación alternativa WHILE
<?php $a = 1; while ( $a < 5 ): $a++; endwhile;