PHP meter una sentencia if dentro de un echo

Digamos que quieres hacer algo así:

 echo '<option value="'.$value.'"'.if($value=='España') echo 'selected="selected"';.'>'.$value.'</option>';

Esto claro está va a fallar porque no se puede meter sentencias de control dentro de un echo.

Para ello, se puede usar un pequeño truco usando el operador ternary (o ternario) para similar una sentencia if/else. Bueno no simula nada, porque es en sí un operador condicional.

Se define de la siguiente manera “?:”

<?php
// Ejemplo de uso para: Operador Ternario
$action = (empty($_POST['action'])) ? 'default' : $_POST['action'];

// Lo anterior es idéntico a esta sentencia if/else
if (empty($_POST['action'])) {
    $action = 'default';
} else {
    $action = $_POST['action'];
}

?>

La expresión (expr1) ? (expr2) : (expr3) evalúa a expr2 si expr1 se evalúa como TRUE y a expr3 si expr1 se evalúa como FALSE.

A partir de PHP 5.3, es posible dejar de lado la parte media del operador ternario. La expresión expr1 ?: expr3 retorna expr1 si expr1 se evalúa como TRUE y expr3 si es de otra manera.

De esta manera ya podremos tener la siguiente lógica en nuestro formulario para verificar si esta seleccionado o no usando una sentencia de control.

echo '<option value="'.$value.'" '.(($value=='España')?'selected="selected"':"").'>'.$value.'</option>';

El operador ternario puede se un poco complejo en algunos casos.

<?php
echo "a string that has a " . (true) ? 'true' : 'false' . " condition in. ";
?>

Imprimirá true.

Para comparar todo el conjunto hacer lo siguiente:

<?php
echo "a string that has a " . ((true) ? 'true' : 'false') . " condition in. ";
?>

Esto evaluará todo el string como se espera: “a string that has a true condition in. ”

Fuente: php.net Operadores de comparación

3 opiniones en “PHP meter una sentencia if dentro de un echo”

  1. Muchas gracias !!! era justo lo que necesitaba… estuve un buen rato intentando con el echo 🙂 no sabía que no se podía ya que no sé mucho php. Con el ternario funcionó perfecto.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *