Сортировка объектов в PHP 7

Предположим у нас есть несортированный список пользователей (имя, возраст):

Иван, 34;
Валера, 17;
Елена, 34;
Иван, 35;
Иван, 37;
Иван, 36;
Антон, 10.

И предположим этих пользователей нужно отсортировать по именам. Используя оператор <=>, получим следующее:

Антон, 10;
Валера, 17;
Елена, 34;
Иван, 34;
Иван, 35;
Иван, 37;
Иван, 36.

PHP-функция для этой сортировки будет выглядеть так:

public function sortBy($property)
{
   usort($this->users, function($userOne, $userTwo) use ($property) {
   return $userOne->$property() <=> $userTwo->$property();
});
}

$property – это имя пользователя. Сортировку наоборот можно произвести поменяв $userOne->$property() и $userTwo->$property() местами. Если вы заметили, то у нас есть несколько Иванов и их тоже можно отсортировать между собой по возрасту. PHP-функция для такой сортировки будет выглядеть так:

public function sortByTwo($propertyOne, $propertyTwo)
{
   usort($this->users, function($userOne, $userTwo) use ($propertyOne, $propertyTwo) {
      return $userOne->$propertyOne() <=> $userTwo->$propertyOne()?:
      $userOne->$propertyTwo() <=> $userTwo->$propertyTwo();
   });
}

Полный рабочий пример с двумя функциями:

class User {
    protected $name;
    protected $age;
    public function __construct($name, $age)
    {
        $this->name = $name;
        $this->age = $age;
    }
    public function name()
    {
        return $this->name;
    }
    public function age()
    {
        return $this->age;
    }
}
class UserCollection {
    protected $users;
    public function __construct(array $users)
    {
        $this->users = $users;
    }
    public function users()
    {
        return $this->users;
    }
    public function sortBy($property)
    {
        usort($this->users, function($userOne, $userTwo) use ($property) {
            return $userOne->$property() <=> $userTwo->$property();
        });
    }
    public function sortByTwo($propertyOne, $propertyTwo)
    {
        usort($this->users, function($userOne, $userTwo) use ($propertyOne, $propertyTwo) {
            return $userOne->$propertyOne() <=> $userTwo->$propertyOne()?:
                $userOne->$propertyTwo() <=> $userTwo->$propertyTwo();
        });
    }
}
$collection = new UserCollection([
    new User('Иван', 34),
    new User('Валера', 17),
    new User('Елена', 34),
    new User('Иван', 35),
    new User('Иван', 37),
    new User('Иван', 36),
    new User('Антон', 10)
]);
//$collection->sortBy('name');
$collection->sortByTwo('name', 'age');
var_dump($collection->users());