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