Operadores en PHP: ?? (Null Coalesce Operator)

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?


¿Sabes lo que es el reto de PHP?

He creado el PHP Journey, una plataforma para que recibas de forma gratuita un email cada día con una pequeña perla de sabiduría de PHP y una pregunta que deberás responder.

Cada día pones a prueba tus conocimientos y aprendes algo nuevo.

Apúntate aquí:

https://urlantools.urlanheat.com/newsletter/php-journey/subscribe


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'] ?? '';

5 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
    • Yo soy muy corto programando, y no me importa admitirlo públicamente. Lo de la «$variable = 0;… » puede ser una errata. Pero creo que es innecesario expresarse de este modo, tan bronco, llamando metiroso de forma tan gratuita. Y que solo retrata al que lo dice, mostrando muy poca educación. ¡Un poco de «educación», por favor!!!

      Responder

Responder a Gorka Urrutia Cancelar la respuesta