operatore spaceship

L’operatore spaceship

Nell’ultima major release di PHP, la 7.0 è stato introdotto un nuovo interessante e altrettanto utile operatore: spaceship. Questo operatore prende il nome dalla sua forma <=> che, con un po’ di fantasia, ricorda quella di una navicella spaziale.

Che cosa fa l’operatore spaceship?

Beh, è molto semplice: spaceship confronta due valori. Se il primo valore è maggiore del secondo restituisce un intero positivo 1, se il primo valore è minore del secondo restituisce un intero negativo -1, infine se i due valori sono uguali restituisce 0.

Vediamo alcuni esempi di utilizzo, comparando diversi tipi di dato, come interi, decimali, stringhe, array e oggetti.

Quando viene utile l’operatore spaceship? Senz’altro durante l’operazione di ordinamento di un array. Prendiamo ad esempio la funzione usort() di PHP.

La funzione usort ordina gli elementi di un array mediande il confronto di ogni elemento dell’array con gli altri. Il confronto viene effettuato da una funzione che deve essere specificata come argomento.

Come vedete usort non restituisce l’array ordinato, ma un booleano che indica il successo o meno dell’operazione. L’array viene specificato come reference, ciò significa che il valore dela variabile array passata come argomento verrà modificato.

Vediamo invece dalla documentazione del manuale di PHP come viene descritta la funzione di confronto:

La funzione di comparazione deve restituire un numero intero minore, uguale o maggiore di zero se il primo argomento è rispettivamente minore, uguale o maggiore del secondo.

Esattamente quello che l’operatore spaceship restituisce!

Perfetto, vediamo quindi un esempio pratico di utilizzo della funzione usort con una funzione di confronto che utilizza l’operatore spaceship. E’ molto semplice:

Nota che in questo caso abbiamo anche utilizzato la nuova funzionalità di PHP7 per definire $a e $b come interi. In questo esempio si presuppone che $asc sia un array di numeri interi, ma come abbiamo visto è possibile confrontare anche gli altri tipi di dato.

Senza l’operatore spaceship la stessa funzione avrebbe richiesto qualche riga di codice in più:

Quindi se state usando una versione di PHP meno recente della 7.0, questo secondo esempio è l’unica opzione.

Leave a reply