Новый оператор, прозвааный космическим кораблем
<=>
по сути, все просто - этот оператор возвращает -1 или 0 или 1 сравнивая значения по своим сторонам.
22 <=> 22 // 0
22 <=> 23 // -1
23 <=> 22 // 1
[1, 2, 3] <=> [1, 2, 3]; // 0
[1, 2, 3] <=> []; // 1
[1, 2, 3] <=> [1, 2, 1]; // 1
[1, 2, 3] <=> [1, 2, 4]; // -1
Вот более практический пример с сортировкой массива:
$numbers = [2, 7, 9, 6, 5];
usort($numbers, function($a, $b) {
return $a <=> $b;
});
Такой способ очень удобно использовать для встроенного метода сортировки внутри коллекции чего-угодно, например пользователей:
class UserCollection {
protected $users;
public function __construct(array $users) {
$this->users = $users;
}
public function sortBy($property) {
usort($this->users, function($userOne, $userTwo) use ($property) {
return $userOne->$property() <=> $userTwo->$property(); // Getting properties throw the getters
});
}
}