El operador Spaceship es una de las muchas novedades introducidas en PHP con su versión 7.0. Es un operador de comparación de tres vías.

Los operadores de comparación convencionales (<, >, !=, ==, etc.) devuelven verdadero o falso (equivalente a 1 o 0). Por otro lado, el operador de la nave espacial tiene tres posibles valores de retorno: -1,0 o 1. Este operador se puede usar con números enteros, flotantes, cadenas, matrices, objetos, etc.

Sintaxis

El símbolo utilizado para el operador de la nave espacial es «<=>».

$retval= operand1 <=> operand2

Aquí, $retval es -1 si el operando1 es menor que el operando2, 0 si ambos operandos son iguales y 1 si el operando1 es mayor que el operando2.

El operador de la nave espacial se implementa como un operador de comparación combinada. Los operadores de comparación convencionales podrían considerarse meras abreviaturas de <=> como muestra la siguiente tabla:

Operador<=> equivalente
$a < $b($a <=> $b) === -1
$a <= $b($a <=> $b) === -1 || ($a <=> $b) === 0
$a == $b($a <=> $b) === 0
$a != $b($a <=> $b) !== 0
$a >= $b($a <=> $b) === 1 || ($a <=> $b) === 0
$a > $b($a <=> $b) === 1

Ejemplo 1

El siguiente ejemplo muestra cómo se puede utilizar el operador de nave espacial en PHP:

<?php
   $x = 5;
   $y = 10;
   $z = $x <=> $y/2;

   echo "$x <=> $y/2 = $z";
?>

Producirá el siguiente resultado:

5 <=> 10/2 = 0

Ejemplo 2

Cambie $x=4 y compruebe el resultado −

<?php
   $x = 4;
   $y = 10;
   $z = $x <=> $y/2;

   echo "$x <=> $y/2 = $z";
?>

Producirá el siguiente resultado:

4 <=> 10/2 = -1

Ejemplo 3

Cambie $y=7 y vuelva a comprobar el resultado −

<?php
   $x = 7;
   $y = 10;
   $z = $x <=> $y/2;

   echo "$x <=> $y/2 = $z";
?>

Producirá el siguiente resultado:

7 <=> 10/2 = 1

Ejemplo 4

Cuando se usa con operandos de cadena, el operando de nave espacial funciona igual que la función strcmp().

<?php
   $x = "bat";
   $y = "ball";
   $z = $x <=> $y;

   echo "$x <=> $y = $z";
?>

Producirá el siguiente resultado:

bat <=> ball = 1

Ejemplo 5

Cambie $y = «baz» y compruebe el resultado −

<?php
   $x = "bat";
   $y = "baz";
   $z = $x <=> $y;

   echo "$x <=> $y = $z";
?>

Producirá el siguiente resultado:

bat <=> baz = -1

Operador de nave espacial con operandos booleanos

El operador de la nave espacial también trabaja con operandos booleanos:

true <=> false returns 1
false <=> true returns -1
true <=> true as well as false <=> false returns 0