Secondo the RFC that introduced the operator, $a <=> $b
viene valutato come:
- 0 se
$a == $b
- -1 se
$a < $b
- 1 se
$a > $b
wh ich sembra essere il caso, in pratica, in ogni situazione ho provato, anche se rigorosamente il official docs offrono solo la garanzia leggermente più debole che $a <=> $b
tornerà
un intero minore, uguale o maggiore di zero quando $a
è rispettivamente inferiore, uguale o superiore a $b
Indipendentemente da ciò, perché desideri un operatore del genere? Anche in questo caso, la RFC risolve questo problema: è quasi completamente più conveniente scrivere funzioni di confronto per usort
(e simili uasort
e uksort
).
usort
prende una matrice per ordinare come primo argomento e una funzione di confronto definita dall'utente come secondo argomento. Utilizza tale funzione di confronto per determinare quale tra una coppia di elementi dell'array è maggiore. La funzione di confronto deve restituire:
un numero intero minore di, uguale ao maggiore di zero se il primo argomento è considerato rispettivamente inferiore, uguale o superiore al secondo.
L'operatore navicella rende questo succinta e conveniente:
$things = [
[
'foo' => 5.5,
'bar' => 'abc'
],
[
'foo' => 7.7,
'bar' => 'xyz'
],
[
'foo' => 2.2,
'bar' => 'efg'
]
];
// Sort $things by 'foo' property, ascending
usort($things, function ($a, $b) {
return $a['foo'] <=> $b['foo'];
});
// Sort $things by 'bar' property, descending
usort($things, function ($a, $b) {
return $b['bar'] <=> $a['bar'];
});
Ulteriori esempi di funzioni di comparazione scritte utilizzando l'operatore spaziale può essere trovato nella sezione Usefulness del RFC.
La versione corrente di PHP è PHP 5.x, PHP 7 è forse una bozza e può essere modificata molte volte in futuro. – panther
http://www.crazyengineers.com/threads/php7-spaceship-operator-explanation-questions-answers.79761/ – Cactus
https://wiki.php.net/rfc/combined-comparison-operator – mpkorstanje