El operador Null Coalescing es una de las muchas características nuevas introducidas en PHP 7. La palabra «coalescencia» significa unir muchas cosas en una. Este operador se utiliza para reemplazar la operación ternaria junto con la función isset().

Operador ternario en PHP

PHP tiene un operador ternario representado por el símbolo «?«. El operador ternario compara una expresión booleana y ejecuta el primer operando si es verdadero, de lo contrario ejecuta el segundo operando.

expr ? statement1 : statement2;

Ejemplo

Usemos el operador ternario para verificar si una determinada variable está configurada o no con la ayuda de la función isset(), que devuelve true si se declara y false si no.

<?php
   $x = 1;
   $var = isset($x) ? $x : "not set";
   echo "The value of x is $var";
?>

Producirá el siguiente resultado:

The value of x is 1

Ahora, eliminemos la declaración de «x» y volvamos a ejecutar el código:

<?php
   # $x = 1;
   $var = isset($x) ? $x : "not set";
   echo "The value of x is $var";
?>

El código ahora producirá la siguiente salida:

The value of x is not set

El operador de coalescencia nulo

El operador de fusión nulo se representa mediante el símbolo «??». Actúa como un atajo conveniente para usar un ternario junto con isset(). Devuelve su primer operando si existe y no es nulo; de lo contrario, devuelve su segundo operando.

$Var=$operand1??$operand2;

El primer operando comprueba si una determinada variable es nula o no (o si está establecida o no). Si no es nulo, se devuelve el primer operando y, de lo contrario, se devuelve el segundo operando.

Ejemplo

Echa un vistazo al siguiente ejemplo:

<?php
   # $num = 10;
   $val = $num ?? 0;
   echo "The number is $val";
?>

Producirá el siguiente resultado:

The number is 0

Ahora quite el comentario de la primera instrucción que establece $num en 10 y vuelva a ejecutar el código:

<?php
   $num = 10;
   $val = $num ?? 0;
   echo "The number is $val";
?>

Ahora producirá el siguiente resultado:

The number is 10

Una aplicación útil del operador de fusión nula es comprobar si el navegador del cliente ha proporcionado un nombre de usuario.

Ejemplo

El código siguiente lee la variable name de la dirección URL. Si de hecho hay un valor para el parámetro name en la URL, se muestra un mensaje de bienvenida para él. Sin embargo, si no es así, el usuario se denomina Invitado.

<?php
   $username = $_GET['name'] ?? 'Guest';
   echo "Welcome $username";
?>

Suponiendo que este script «hello.php» está en la carpeta htdocs del servidor PHP, ingrese http://localhost/hello.php?name=Amar en la URL, el navegador mostrará el siguiente mensaje:

Welcome Amar

Si http://localhost/hello.php es la URL, el navegador mostrará el siguiente mensaje:

Welcome Guest

El operador de coalescencia nulo se utiliza como reemplazo del caso específico del operador ternario de verificación de la función isset(). Por lo tanto, las siguientes declaraciones dan resultados similares:

<?php
   $username = isset($_GET['name']) ? $_GET['name'] : 'Guest';
   echo "Welcome $username";
?>

Ahora producirá el siguiente resultado:

Welcome Guest

Puede encadenar los operadores «??» como se muestra a continuación:

<?php
   $username = $_GET['name'] ?? $_POST['name'] ?? 'Guest';
   echo "Welcome $username";
?>

Ahora producirá el siguiente resultado:

Welcome Guest

Esto establecerá el nombre de usuario en Invitado si la variable $name no está establecida por el método GET o por POST.