Чисто в качестве дополнительной информации для этого принят RFC (https://wiki.php.net/rfc/combined-comparison-operator).
Итак, функция сравнения будет иметь вид ...
<?php
$data = [...];
usort($data, function($left, $right){ return $left <=> $right; });
?>
Несколько действительно приятных особенностей в том, что сравнение выполняется точно так же, как и все другие сравнения. Таким образом, жонглирование типов произойдет, как и ожидалось.
Пока что нет магического метода, подобного __forCompare (), который позволял бы объекту выставлять сравнительное значение. Текущее предложение (другой RFC) состоит в том, чтобы каждый объект был введен в каждый другой объект во время сравнения, чтобы он выполнял сравнение - что мне кажется странным - потенциальная возможность рекурсии и переполнения стека ... Я бы подумал, что либо введение типа объекта для сравнения (предоставление объекту возможности представлять соответствующие значения в зависимости от типа сравнения), либо слепой запрос значения, которое объект может предоставить для сравнения, был бы более безопасным. решение.
Еще не интегрирован в PHP-NG (сейчас PHP 7), но, надеюсь, скоро будет.