Header Image

PHP7 spaceship operator

Загружено/обновлено 30 Июня 2016

Новый оператор, прозвааный космическим кораблем

<=> по сути, все просто - этот оператор возвращает -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
        });
    }
}