L’opérateur Spaceship c’est quoi ?
L’opérateur Spaceship c’est ceci : <=>, un nouvel opérateur introduit avec la version 7 de PHP. Découvrons ensemble à quoi il sert.
Au passage, si tu souhaites en savoir plus sur les versions supportées de PHP, je t’invite à lire cet article.
A quoi sert l’opérateur Spaceship ?
C’est un opérateur de comparaison. Il utilise les mêmes règles de comparaison que les opérateurs qui existaient précédemment à son arrivée : <
, <=
, ==
, >=
, >
Son mode de fonctionnement est le suivant :
Returne 0 si les valeurs de chaque côté sont égales
Returne 1 si la valeur sur la gauche est supérieure
Returne -1 si la valeur sur la droite est supérieure
Par exemple :
echo 1 <=> 1; // retourne 0
echo 7 <=> 3; // retourne 1
echo 2 <=> 8; // retourne -1
Il va te permettre d’écrire des fonctions de comparaisons beaucoup plus lisibles, ce qui en soit, va permettre à tes collègues de rentrer plus facilement dans ton code pour le comprendre, l’améliorer ou le déboguer 😉
Par exemple au lieu d’écrire ceci :
function order_func($a, $b) {
return ($a < $b) ? -1 : (($a > $b) ? 1 : 0);
}
tu pourras faire le malin en écrivant ceci :
function order_func($a, $b) {
return $a <=> $b;
}
Du coup, le tri d’un tableau avec usort devient un jeu d’enfant. Regarde moi ça :
$data = [7,3,12,9,0,-1];
usort($data, function ($a, $b) {
return $a <=> $b;
});
echo '<pre>';
print_r($data);
Tu auras comme retour ceci :
Array
(
[0] => -1
[1] => 0
[2] => 3
[3] => 7
[4] => 9
[5] => 12
)
It’s a kind of magic, non ?
Quels types de données sont supportés par cet opérateur ?
Il te faut savoir également qu’il fonctionne sur tous les types de données (source RFC) :
// 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
Ton avis ?
Bon alors que penses tu de ce petit article au format court pour présenter des éléments de langages ?
Quelle fonction, quel aspect tu souhaites que j’aborde dans un prochain article ? Dis moi tout cela dans les commentaires.
En conclusion
As-tu des cas d’utilisation du Spaceship à partager dans les commentaires ?

Rejoins ma formation de plus de 4h qui parle exactement de cela ! ;-)En tant que lecteur de ce blog, tu bénéficies de 10% de réduction en cliquant sur ce lien ??.
Rejoins vite les dizaines d’élèves qui ont déjà rejoins cette formation dans laquelle tu pourras te familiariser avec les notions suivantes de Laravel : l’installation de Laravel, le routage, les controllers, les modèles, l’ORM Eloquent, le moteur de template Blade, les envois de mails, la gestion des notifications.
Tu hésites ? Je te comprends et je souhaite te préciser plusieurs choses :
1. Mes élèves sont ma meilleure carte de visite :
Voici ce qu’ils pensent de cette formation
24/06/2020 : Vraiment très bien conçu et dispensé. Le rythme est bon, clair, précis donc essentiel à une bonne compréhension. Les réponses aux questions sont dans le même esprit, donc … Un grand merci à Frédéric pour ce cours de qualité. Vivement le prochain !!
17/06/2020 : Très bon cours ! Clair même pour un débutant (qui a des bases quand même). Formateur sympa 😉 vivement d’autre cours.
Retrouve tous les avis, sur la page de la formation 😉
2. Le nombre de coupons est limité !
Si tu veux en profiter, n’attends pas trop longtemps 😉
Alors à tout de suite de l’autre côté, je l’espère !
2 réponses sur « Opérateur Spaceship <=>, it’s a kind of magic ! »
Salut,
Intéressant, j’avais pas vraiment retenu cet opérateur. Il serait peut-être intéressant de parler des nouveautés de la version 7.4 : extension du spread, fonction fléchée…
BestMomo, c’est un honneur de te voir ici.
Tu as raison, ces sujets sont intéressants et d’autres vont bientôt pointer le bout du nez avec PHP8.
Je vais m’atteler à lancer des articles sur ces sujets dès que j’ai un petit moment. Si tu souhaites participer tu es le bienvenu ! 😉