Operadores ternarios en PHP
Hace unos días estaba realizando unas modificaciones en una aplicación para un cliente importante cuando me enfrenté al siguiente problema; en un formulario con etiquetas select debían de aparecer seleccionadas las opciones que ya estaban en la base de datos. Mi primera idea fue hacer una serie de condicionales if, pero la verdad es que sería bastante tedioso y no me apetecía nada ponerme con ello, de modo que me estrujé el cerebro y recordé los operadores ternarios en PHP y aunque no los recordaba bien no tardé en dominarlos y resolví el problema en las propias opciones del select.
pero… ¿Qué son los operadores ternarios?
Los operadores ternarios son basicamente una forma diferente de escribir una estructura if…else. De este modo una estructura if..else quedaría de la siguiente forma.
if(condicion){ //codigo si se cumple la condicion }else{ //código si no se cumple la condicion }
Mientras que utilizando operadores ternarios sería de la siguiente forma:
condición ? valorSiEsVerdadero : valorSiEsFalso
De este modo haciendo un ejemplo sencillo utilizando el operador sería:
$mensaje = ($temperatura < 15)? "Hace frío para ir al campo":"Hace un bonito día para el senderismo";
Fácil ¿verdad?, pero lo interesante de los operadores ternarios es que pueden utilizarse por ejemplo para tomar valores desde variables POST y GET, y desde PHP 5.3 es posible abreviar una sentencia ternaria excluyendo la expresión central. Si la expresión evalúa como verdadera, se devuelve su valor. Si no es así, se devuelve el valor alternativo. Tal y como podemos ver en el siguiente ejemplo:
$temperatura = isset($_POST['temperatura'])?:null;
Pero volviendo al caso que yo utilicé, lo hice incluso recogiendo una consulta de una base de datos y comparando los valores, llevándolo más allá que un simple condicional:
Tipo de permiso: <select name="tipo"> <option value="festivo" <?= $row[12]=='festivo'?'selected':''?>>Festivo</option> <option value="asuntos" <?= $row[12]=='propios'?'selected':''?>>Asuntos Propios</option> <option value="vacaciones" <?= $row[12]=='vacaciones'?'selected':''?>>Vacaciones</option> <option value="sueldo" <?= $row[12]=='sin sueldo'?'selected':''?>>Permiso sin sueldo</option> <option value="autorizado" <?= $row[12]=='autorizado'?'selected':''?>>Permiso autorizado</option> <option value="otros" <?= $row[12]=='otros'?'selected':''?>>Otros</option> </select>
Aquí comparamos el resultado de una consulta a una BBDD donde recogiendo el campo 12 de la tabla se compara con el valor que debe de estar seleccionando, tomando solo aquel que necesitamos.
El uso y el abuso
Hay que tener cuidado con el abuso de este operador, de forma puntual ofrece una solución elegante y puede permitirnos sustituir un if en el código, pero si lo anidamos puede resulta totalmente ilegible para el mantenimiento del código ya sea por nosotros o por terceros.
There are 2 Comments.