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 ?
Affiliation : Jérémy Mouzin – Présentation du module algorithmique
Tu te prépares à passer bientôt des entretiens techniques d’embauche (sur CodinGame peut-être ?) ou tu as échoué lors de tes derniers entretiens ?
Ne rate plus une occasion de décrocher ton 1er job en te formant à l’algorithmique dès maintenant !
Dans ce module de 60h j’ai résolu des exercices en live sur les plateformes CodeWars et CodinGame en t’expliquant toute ma façon de penser de A à Z.
Tu apprendras la méthode DECAPI et l’utilisation du pseudo-code pour éviter le syndrome de la page blanche et résoudre n’importe quel exercice facilement.
Cette formation est unique en son genre et n’existe nulle part ailleurs sur internet, prends le temps de lire le contenu complet de ce module car il peut te permettre d’accéder enfin à ton 1er job de développeur.
Accéder au module algorithmique
Astuce budget : tu peux payer en 5 fois sans frais !
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 ! 😉