<=> spaceship operator, czyli operator porównania trójstronnego w PHP, inaczej zwany operatorem połączonego porównania (combined comparison)

Operator spaceship  dostępny jest od PHP7,  przyjmuje dwa wyrażenia, lewe oraz prawe i pozwala określić, które wyrażenie jest większe, mniejsze, lub czy oba wyrażenia są równe. 

Spaceship
Spaceship | envato, autor Rawpixel

Operator Spaceship to typowy operator porównania trójstronnego, zwraca 0, jeśli oba operandy są równe, zwraca 1, jeśli lewe wyrażenie jest większe i zwraca -1, jeśli prawe wyrażenie jest większe. Operator <=> głównie, ale znacząco uprasza zapisy funkcji sortujących, które przyjmuje funkcja usort() oraz jej pochodne.

Wartości zwracane przez operator <=>

Pomocne dla zrozumienia działania operator porównania trójstronnego będą poniższe przykłady z wynikami porównań.

// Integers
echo 1 <=> 1; // 0
echo 1 <=> 2; // -1
echo 2 <=> 1; // 1
 
// Floats
echo 1.5 <=> 1.5; // 0
echo 1.5 <=> 2.5; // -1
echo 2.5 <=> 1.5; // 1
 
// Strings
echo "a" <=> "a"; // 0
echo "a" <=> "b"; // -1
echo "b" <=> "a"; // 1
 
echo "a" <=> "aa"; // -1
echo "zz" <=> "aa"; // 1
 
// Arrays
echo [] <=> []; // 0
echo [1, 2, 3] <=> [1, 2, 3]; // 0
echo [1, 2, 3] <=> []; // 1
echo [1, 2, 3] <=> [1, 2, 1]; // 1
echo [1, 2, 3] <=> [1, 2, 4]; // -1
 
// Objects
$a = (object) ["a" => "b"]; 
$b = (object) ["a" => "b"]; 
echo $a <=> $b; // 0
 
$a = (object) ["a" => "b"]; 
$b = (object) ["a" => "c"]; 
echo $a <=> $b; // -1
 
$a = (object) ["a" => "c"]; 
$b = (object) ["a" => "b"]; 
echo $a <=> $b; // 1
 
$a = (object) ["a" => "b"]; 
$b = (object) ["b" => "b"]; 
echo $a <=> $b; // 0

Operator połączonego porównania

Mając powyższe, przykłady powinieneś łatwo zrozumieć, że operator spaceship łączy kilka operatorów i uprasza nasz kod. <=> zawiera w sobie: ==, <, <=, >= oraz >. Jak bardzo upraszcza pisany kod oraz jego późniejsze rozumienie pokażę na przykładzie funkcji sortującej usort().

Warte przeczytania: