Operadores en PHP: ?? (Null Coalesce Operator)


(Una cosilla antes de que sigas leyendo… estoy escribiendo un libro muy divertido sobre buenas prácticas en PHP titulado «Aliens contra Elefantes»).


En la versión 7 de PHP se introdujo un nuevo operador: ?? (sí, dos interrogaciones). A este operador le han llamado el Null Coalesce Operator.

A pesar de que ya lleva un tiempo con nosotros apenas he visto usarlo así que creo que hay que darle un poco de promoción.

¿Para qué sirve? Pues para evitar este habitual trozo de código:

echo isset($variable) ? $variable : 'No existe';

¿A que te suena haber escrito esto mismo mil veces?

Ya he comentado mil veces que quienes nos dedicamos a la programación somos, sobre todo, gente vaga. Así que para ahorrarnos un poco de trabajo se ha creado este operador:

echo $variable ?? 'No existe';

Si la variable existe y no es nula se muestra su valor. En caso contrario se mostraría el mensaje ‘No existe’.

En realidad lo que hace es comprobar si el valor es null. Podemos comprobarlo aquí pasándole una variable que exista pero con valor null:

$variable = null;

echo $variable ?? 'No existe' . PHP_EOL; // Se mostrará el mensaje "No existe" 

Ojo, no se aplica a variables ‘vacías’:

$variable = '';

echo $variable ?? 'Valor por defecto' . PHP_EOL; // Esto no mostrará nada

Ni a variables con valor 0:

$variable = 0;

echo $variable ?? 'Valor por defecto' . PHP_EOL;// Esto no mostrará nada

¿Qué utilidad tiene este operador?

Viene muy bien en los casos que tenemos un array con algún índice que podría no existir. El ejemplo a continuación nos lanzaría un notice:

$array = [];
echo $array['indice-inexistente'];

NOTA: Puede que pienses que un notice no es algo grave; si eres de esas personas te recomiendo que leas Seamos estrictos en PHP (declare_strict=1 y otras zarandajas).

Pues esto ya no nos va a dar problemas porque podemos hacer así:

echo $array['indice-inexistente'] ?? '';

4 comentarios en «Operadores en PHP: ?? (Null Coalesce Operator)»

  1. Yo creo que, en general, precisamente porque somos vagos, somos programadores. Pues en eso consiste, en hacernos la vida más fácil a los demás y a nosotros mismos.

    Gracias por la explicación tan amena. Me alegro de no haber elegido la primera opción del Google (php.net)..

    Un saludo

    Responder
  2. decir que si creo una variable con valor 0, al imprimirla no muestra NADA, es demostrar que somos un poco cortos programando.
    El valor 0 es un valor incluso para isset

    Asi que MIENTES diciendo que esto deberia imprimer NADA
    $variable = 0;
    echo $variable ?? ‘Valor por defecto’

    Aveces mentimos si querer, pero una vez sabes la verdad y sigues mintiendo ya pasas a ser mentiroso.

    Responder

Deja un comentario