ESTRUCTURAS CONDICIONALES
En PHP existen una serie de instrucciones que permiten tomar decisiones lógicas cuando programamos: estas instrucciones, comunes a distintos lenguajes de programación, se suelen denominar de forma general «condicionales».
- if…else
- if…elseif…else
- switch
CONDICIONAL IF…ELSE EN PHP
Estas instrucciones son quizás las más usadas de todos los lenguajes de programación, ya que son las más básicas. IF (en español: si…) ELSE (en español: sino…). La estructura general de un condicional if else es la siguiente:
if(expresión) {
… sentencias 1, 2, 3 … ; } else { … sentencias A, B, C …; } |
En este trozo de código estaríamos diciendo que si la expresión se cumple se ejecutan las sentencias 1, 2, 3…, y en caso de que no se cumpliese la expresión se ejecutarían las sentencias que están dentro del else, es decir, las sentencias A, B, C …
Escribe este código en un editor como Notepad++ y guárdalo con un nombre de archivo como ejemplo1.php. A continuación, sube el fichero al servidor y visualiza el resultado.
<?php
$galletas = true; if($galletas == true) { echo ‘Hay galletas’; } else { echo ‘No hay galletas’; } ?> |
En este ejemplo, estamos dando un valor $galletas y comprobamos si el valor de esta variable es true o no, introduciéndolo en la expresión del condicional. Tal cual está, este ejemplo produciría el resultado ‘Hay galletas’, aunque si cambiásemos $galletas = true; por $galletas = false daría como resultado la segunda sentencia.
Escribe ahora este otro código guárdalo con un nombre de archivo como ejemplo2.php. A continuación, sube el fichero al servidor y visualiza el resultado.
<?php
$galletas = true; if($galletas == true){ ?> <br/> <p>  ;  ;  ;  ;———————————</p> <?php echo ‘  ;  ;  ;  ;  ;  ;  ;  ;  ;  ;  ;  ;  ;  ;Hay galletas’; echo ‘<br/>’; echo ‘<br/>’; echo ‘  ;  ;  ;  ;———————————‘; } else { echo ‘No hay galletas’; } ?> |
Como podrás comprobar, el código produce el mismo resultado. Unicamente hemos introducido algunos caracteres para mejorar la forma en que se ve (recordar que   seguido de un punto y coma, sin espacio entre ambos, equivale a un espacio en blanco en HTML). Compara las similitudes y diferencias entre los dos códigos que hemos escrito. En nuestro ejemplo2 podrás comprobar que hemos escrito un fragmento de código php, luego un fragmento de código html y luego otro fragmento en php. Si te fijas, no hemos utilizado las etiquetas de apertura y cierre de html, aunque hubiera sido quizás más correcto hacerlo, es decir, escribir:
<html>
<?php $galletas = true; if($galletas == true){ ?> <br/> <p>  ;  ;  ;  ;———————————</p> <?php echo ‘  ;  ;  ;  ;  ;  ;  ;  ;  ;  ;  ;  ;  ;  ;Hay galletas’; echo ‘<br/>’; echo ‘<br/>’; echo ‘  ;  ;  ;  ;———————————‘; } else { echo ‘No hay galletas’; } ?> </html> |
Como comprobarás, a veces los navegadores son capaces de interpretar el código aunque falten algunas etiquetas o contenga algunos errores. Esta es una de las cuestiones que diferencia HTML de lenguajes de programación en sentido estricto como C, Java o Visual Basic, donde la sintaxis es mucho más estricta.
En este código además podemos señalar:
- Usamos el código   que en HTML significa “un espacio”. Recuerda que HTML omite los espacios antes y después de una cadena de texto. Por ello hemos de especificar que se introduzcan espacios con  .
- Un salto de línea, que introducimos gracias a la etiqueta <br/>, podemos escribirlo tanto fuera del código php como dentro de él. Para introducirlo dentro de php, hemos de ponerlo dentro de un echo, que es la forma que tenemos de indicarle a php de que dé salida a esa etiqueta como código html.
¿Qué pasaría si introdujéramos una etiqueta html como <br/> directamente dentro del código php? Pruébalo y comprobarás que en el navegador se muestra un mensaje de error de este tipo:
Parse error: syntax error, unexpected ‘<‘ in /home/m/dom/mi.com/public_html/prueba.php on line 11
Esta es una cuestión que debes de tener en cuenta: para introducir html debes de cerrar un bloque php o usar una instrucción echo dentro del bloque php. La instrucción echo viene significando “dar salida html a lo que va a continuación”.
CONDICIONALES IF…ELSE IF…ELSE EN PHP
La estructura de estas instrucciones viene a ser muy similar que la anterior. Su significado: “Si ocurre esto, haz esto, sino si ocurre esta otra cosa, haz esto otro, sino si ocurre esta otro cosa, haz …”. La estructura general de un condicional if else if [else] es:
if(expresión) {
… sentencias 1, 2, 3, …; } else if(expresión) { … sentencias A, B, C, …; } else { … sentencias M, N, O, …; } |
Esta es la síntaxis con la que debe ser usada else if. Un else if se ejecutará, siempre y cuando, no haya alguna respuesta verdadera en el if o else if anterior; luego de que se llega al final de los else if, y ninguno ha sido verdadero, se ejecutará lo que está dentro del else final.
Pueden haber varios else if, pero estos están siempre dentro de un if y terminarán con un else (sólo uno) final.
Escribe este código en un editor como Notepad++ y guárdalo con un nombre de archivo como ejemplo3.php. A continuación, sube el fichero al servidor y visualiza el resultado.
<?php
$test =33; if ($test > 40) { echo «Sí, $test es mayor que 40.»; } else if ($test > 35) { echo «Sí, $test es mayor que 35.»; } else if ($test > 30) { echo «Sí, $test es mayor que 30.»; } else { echo «No, $test es menor que 40, 35 y 30.»; } ?> |
En este caso la respuesta sería: Sí, 33 es mayor que 30.
Si el valor de $test se cambia a 22, la respuesta sería: No, 22 es menor que 40, 35 y 30.
OPERADOR CONDICIONAL TERNARIO
Para escribir condicionales la estructura básica de lenguajes como PHP, JavaScript, Java, y otros es la sentencia if. Otro tipo de condicionales como el switch o el else if pueden ser reemplazados por if. Hay otra sintaxis de condicional que se denomina operador condicional ternario y que se escribe con expresiones que incluyen una interrogación y dos puntos como: a ? b : c;
La sintaxis y significado del operador condicional ternario (válida para diferentes lenguajes, como PHP, JavaScript, Java, etc.) es la siguiente:
expresiónConValorBooleano ? expresión1 : expresión2; Interpretación: si la expresiónConValorBooleano es cierta se ejecuta la expresión1, y en caso contrario se ejecuta la expresión2. |
Ejemplos. Supongamos que tenemos cuatro variables: A = 5, B = 3, C = -7 y D = 5
Expresión | Resultado |
A==5 ? dispara(): espera(); | Se ejecuta dispara() |
A<B ? dispara(): espera(); | Se ejecuta espera() |
B<C ? dispara(): espera(); | Se ejecuta espera() |
A<B && B>C ? dispara(): espera(); | Se ejecuta espera() |
A<B && B>C || B==3 ? dispara(): espera(); | Se ejecuta dispara() |
A==5 ? A=20: A=1; | Si A valía 5 ahora vale 20, caso contrario ahora vale 1. |
B = B==3 ? B*10: B*100; | Se trata de una asignación: si B valía 3, ahora B vale 10 veces
lo que valía, caso contrario ahora B vale 100 veces lo que valía. |
El operador ternario puede ser insertado en sentencias de ejecución donde no se permite la inserción de if, por ejemplo en una operación de asignación o en la variable de control de un bucle for. Usar el operador condicional ternario tiene ventajas e inconvenientes.
VENTAJAS E INCONVENIENTES DEL OPERADOR CONDICIONAL TERNARIO
En la siguiente tabla resumimos las ventajas e inconvenientes del operador condicional ternario comparándolo con el if tradicional.
Condicional ternario | If tradicional |
Permite la escritura compacta, permitiendo ahorrar escritura de código. | Obliga a escribir más sentencias para conseguir el mismo resultado. |
Resulta más difícil de leer, entender y depurar | Resulta más fácil de leer, entender y depurar |
No todos los programadores lo usan, algunos ni siquiera lo conocen. | Todos los programadores lo usan y lo conocen. |
Se admite en la sintaxis de los lenguajes en lugares donde no se admite la sentencia if | No es válido en ciertas ubicaciones donde sólo se admiten expresiones, pero puede hacerse la evaluación antes del punto donde sea necesario el condicional. |
Criticado por algunos expertos, adorado por otros | Uso y aceptación cuasi-universal |
EJEMPLOS DE USO EN PHP
Escribe este código, guárdalo como archivo php y comprueba los resultados de ejecución. Razona sobre los resultados obtenidos y trata de explicar paso a paso la lógica de todo lo que hace el código.
<!DOCTYPE html>
<html><head><title>Ejemplo desarrolloweb1106</title><meta charset=»utf-8″> </head> <body><div id=»cabecera»><h2>dw1106</h2><h3>Ejemplos PHP</h3></div> <?php $A=5; $B=3; $C=-7; $D=5; $msg = »; $A==5 ? $msg=’A es 5<br/>’: $msg=’A no es 5<br/>’; echo $msg; $A<$B ? $msg=’A es menor que B<br/>’: $msg=’A es mayor o igual que B<br/>’; echo $msg; $B<$C ? $msg=’B es menor que C<br/>’: $msg=’B es mayor o igual que C<br/>’; echo $msg; ?> </body> </html> |
El resultado esperado es que se muestre por pantalla:
Cursos aprenderaprogramar.com
Ejemplos PHP
A es 5
A es mayor o igual que B
B es mayor o igual que C
EJERCICIO 1
Ejecuta este código y responde:
a) ¿Qué resultado se obtiene por pantalla?
b) Modifica el código sustituyendo el operador ternario por if else para que el resultado obtenido sea el mismo.
<?php
$haceFrio = 15; $respuesta =»»; $temperatura = ($haceFrio<20) ? $respuesta = «Hace frio» : $respuesta = «No hace frio»; echo $respuesta; ?> |
EJERCICIO 2
Define las variables $tipo, $grosor, $diametro y $marca. Establece que el tipo sea “Rueda de camión”, el grosor 0.33, el diámetro 1.25 y la marca “Kimashuki”. Crea el código PHP donde a través de condicionales if realices la siguiente comprobación: si el diámetro es superior a 1.4 debe mostrarse por pantalla el mensaje “La rueda es para un vehículo grande”. Si es menor o igual a 1.4 debe mostrarse por pantalla el mensaje “La rueda es para un vehículo pequeño”. En otro caso, debe mostrarse “No existe un tamaño de rueda válido”.