Menú Cerrar

Nuevos operadores en PHP 7

Con la nueva versión 7 de PHP han llegado algunas cosas que a simple vista pueden sonar raro y otras veces preguntarte pero esto que es. Han añadido exactamente dos operadores: ?? y <=>.

El operador ?? ha sido llamado en la web que describe las nuevas características de PHP 7 como «operador de fusión de null», en C# se le puede conocer como operador de uso combinado de null, aunque supongo que todo dependerá de la traducción y la costumbre. En PHP puede ocurrir que tengas que comprobar el valor de una variable y que esta no exista, sobretodo con las $_GET y las $_POST, esto obliga a utilizar la función isset(), que comprueba si una variable existe y no es null, antes de hacer otras comprobaciones y usos. El operador ?? se puede utilizar como operador ternario junto con isset():

// Con isset()
$existe = isset($_POST['nombre']) ? $_POST['nombre'] : 'Anonimo';

// Con ??
$existe = $_POST['nombre'] ?? 'Anonimo';

Con este operador nos ahorramos repetir dos veces la variable a comprobar, además del propio isset().

El otro operador añadido es <=>, el cuál ha sido bautizado como «el operador nave espacial». Yo no apostaría porque se le quede este nombre para siempre, mejor platillo volante u ovni, a veces las traducciones dan resultados que aunque son teóricamente correctos después no acaban de quedar bien. A lo que iba, este operador sirve para comparar dos expresiones y devolver -1, 0 o 1 según sea la primera expresión menor, igual o mayor que la segunda expresión. Esto añade una excepción a los demás operadores típicos de comparación que siempre devolverán true o false:

1 <=> 2; // -1
1 <=> 1; // 0
2 <=> 1; // 1

Resumiendo, con los dos nuevos operadores se ha buscado simplificar el código y ahorrar caracteres, lo cuál puede venir muy bien en según que circunstancias. En mi opinión me parece que han acertado con ??, pero no con <=>. No me acaba de convencer ya que después de conseguir el resultado (-1, 0, 1) hay que añadir más if‘s y algún que otro elseswitch para tratarlo, a no ser que sólo se necesite detectar sólo una de las tres opciones. Si se quieren tratar las tres posibilidades habrá que escribir igual o más código.