If abreviado en PHP: el operador ternario

PHP

En ocasiones queremos introducir sentencias condicionales en una sola línea, pero si usamos una sentencia if, puede que tengamos que usar varias líneas para que la legibilidad de nuestro código sea la adecuada. Sin embargo podemos usar el operador ternario en PHP, que se comporta exactamente igual que una sentencia if con else.

Qué es el operador ternario

El operador ternario es la forma corta de la sentencia if { ... } else { ... }, por lo que en lugar de escribir el código del siguiente ejemplo:

if ($condicion) {
    $resultado = 'verdadero';
} else {
    $resultado = 'falso';
}

Podríamos usar el operador ternario de este modo:

$resultado = $condicion ? 'verdadero' : 'falso';

Si la variable $condicion se evalúa como true, el operando de la izquierda 'verdadero' será asignado a la variable $resultado. Si por el contrario la variable $condicion se evalúa como false, se asignará el operando de la derecha 'falso'.

El nombre del operador ternario significa «operador que funciona con tres operandos». Se denomina operando a cada parte de la expresión, siendo el operador ternario el único operador de PHP que necesita tres operandos, que son la condición, el resultado que se asignará si es cierta y el resultado que se asignará si es falsa. Si no tienes claro qué expresiones devolverán true o false en PHP, consulta esta tabla.

Sintaxis del operador ternario

El operador ternario existe en muchos lenguajes de programación y sirve para que, dada una condición, ejecutar una sentencia o devolver un valor si se cumple dicha condición. Si no se cumple la condición, se devolverá otro valor o se ejecutará otra sentencia.

La sintaxis genérica y común a todos los lenguajes es la siguiente:

sentencia_booleana ? valor_si_verdadero : valor_si_falso

Operador ternario abreviado

Desde PHP 5.3 es posible omitir el operador de la izquierda, pudiendo acortar ciertas expresiones de siguiente modo:

$resultado = $valor ?: 'defecto';

En este caso, el valor que tendrá la variable $resultado será el valor de la variable $valor a no ser que la variable $valor se evalúe como falsa, en cuyo caso pasará a tomar el valor 'defecto'.

Si usásemos la forma normal del operador ternario, la expresión anterior sería equivalente a la siguiente:

$resultado = $valor ? $valor : 'defecto';

Operadores ternarios encadenados

También podemos encadenar varios operador ternarios, aunque no funcionará igual que en otros lenguajes de programación como JavaScript, ya que en PHP, el operador ternario es asociativo por la izquierda. Vamos a poner el siguiente ejemplo:

$resultado = $condicion ? 'verdadero' : $condicion2 ? 'verdadero2' : 'falso';

Por lógica, pensarías que primero se evalúa la variable $condicion, devolviendo el valor 'verdadero' si se cumple. Sin embargo, lo que ocurre en realidad es que $condicion2 se evalúa primero. Por ello, aunque $condicion se evalúe como true y $condicion2 sea false, el resultado será 'verdadero2'.

La buena noticia es que no tienes que entenderlo, ya que desde PHP 7.4 los paréntesis son obligatorios debido a la confusión que esto generaba, por lo que la expresión anterior devolverá un error. La forma correcta es la siguiente:

$resultado = $condicion ? 'verdadero' : ($condicion2 ? 'verdadero2' : 'falso');

En efecto, ahora si $condicion se evalúa como true, el resultado será siempre 'verdadero'.

Ejemplos de uso en PHP

Vamos a ver un simple ejemplo en el que usamos dos condiciones:

$a = 2;
$b = 1;
 if ($a > $b) {
  $resultado = true;
} else {
  $resultado = false;
}

echo($resultado); // true

Para obtener el mismo resultado usando el operador ternario tendríamos que escribir el código anterior de este modo:

$a = 2;
$b = 1;

$resultado = $a > $b ? true : false;

echo($resultado); //true

También es muy habitual usar el operador ternario para mostrar texto en pantalla:

$a = 2;
$b = 1;

echo ($a > $b ? 'a es mayor que b' : 'a es menor o igual que b'); 

Alternativamente también podemos usar esta expresión:

echo ($a > $b) ? 'A es mayor que B' : 'A es menor o igual que B';

Espero que os haya sido útil a los que estéis comenzando con PHP y también a los que no en caso de no utilizar demasiado este operador.

Y esto ha sido todo.


Avatar de Edu Lazaro

Edu Lázaro: Ingeniero técnico en informática, actualmente trabajo como desarrollador web y programador de videojuegos.

👋 Hola! Soy Edu, me encanta crear cosas y he redactado esta guía. Si te ha resultado útil, el mayor favor que me podrías hacer es el de compatirla en Twitter 😊

Si quieres conocer mis proyectos, sígueme en Twitter.

13 comentarios en “If abreviado en PHP: el operador ternario

  1. Buen artículo para los que no lo conocieran, venia buscando un ejemplo en el que lo usaras con un «operador estricto» (no se si se llaman así). Me explico:

    – Este caso falla, siempre se da la condición negativa:
    ($variable === 0) ? «Es cero» : «No es cero»;
    – Este caso funciona:
    ($variable == 0) ? «Es cero» : «No es cero»;

    1. Falla porque tu variable tiene 0 como string ejem.
      $variable = «0»;
      cuando usas el operador de identidad (===), este evalúa que sean iguales, pero también que sean del mismo tipo. Por eso te devuelve error cuando lo usas.


      //esto te devuelve si
      $var = 0;
      echo ($var === 0) ? "si" : "no";

  2. $resultado = $condicion ? ‘verdadero’ : $condicion2 ? ‘verdadero2’ : ‘falso’;

    En este caso si $condicion es True y condicion2 es false comentas que el resultado es Verdadero2 pero no lo entiendo por que si primero analiza $condicion2 y $condicion2 es false debería saltar el else, es decir falso. ¿podrias explicarlo? gracias

    1. Creo que a todos nos parece algo engorroso. Ahora mismo los paréntesis son obligatorios, por lo que la expresión fallaría. Sin embargo, en versiones previas a PHP 7.4, la expresión sería equivalente a esta:

      $resultado = ($condicion ? 'verdadero' : $condicion2) ? 'verdadero2' : 'falso';

      Si $condicion es true y condicion2 es false, quedaría esta expresión:

      $resultado = (true ? 'verdadero' : false) ? 'verdadero2' : 'falso';

      Tal y como ves, la primera expresión entre paréntesis dará como resultado ‘verdadero’, por lo que nos quedaría lo siguiente:

      $resultado = 'verdadero' ? 'verdadero2' : 'falso';

      Dado que ‘verdadero’ se evalúa como true, el resultado será ‘verdadero2’.

      1. La verdad, no recomiendo este operador ternario para eso (aunque se pueda) ya que la idea es hacer un código limpio y legible, con 7, ya de legible no tendrá nada.
        Luego, puede ser con if anidados o con switch, pero la verdad, a ser posible, en esa cantidad, ya trato de usar un arreglo y un in_array o algo de ese estilo.
        Saludos

  3. El operador ?? no pertenecería a este grupo?

    Digamos:
    $a = $b ?? $c ?? $d;
    Donde $a toma el primer valor que no sea null de izquierda a derecha. Ahora no sabría si llamarlo una forma resumida del ternario o un lógico. Me parece que ternario ya que en PHP una operación lógica debe devolver lógico también, y en este caso es un valor lo que se asigna a $a.

Deja una respuesta

“- Hey, Doc. No tenemos suficiente carretera para ir a 140/h km. - ¿Carretera? A donde vamos, no necesitaremos carreteras.”