Spaceship <=> (космический корабль) в php 7

Сравнивает два выражения. Отдаёт 1, если первое выражение больше, 0 если они равны, -1 если больше правое выражение.

echo 2 <=> 1; // 1
echo 3 <=> 3; // 0
echo 4 <=> 5; // -1

Точно так же сравнивает числа с плавающей точкой:

echo 7.2 <=> 7.1; // 1
echo 7.3 <=> 7.3; // 0
echo 7.4 <=> 7.5; // -1

И строки:

echo 'abd' <=> 'abc'; // 1
echo 'abc' <=> 'abc'; // 0
echo 'abc' <=> 'abe'; // -1

И массивы:

echo array(2) <=> array(1); // 1
echo array(3) <=> array(3); // 0
echo array(1, 4) <=> array(1, 5); // -1

А так же итерабельные объекты:

$a = new ArrayObject();
$a->append(2);
$b = new ArrayObject();
$b->append(1);
echo $a <=> $b; // 1

$a = new ArrayObject();
$a->append(2);
$b = new ArrayObject();
$b->append(2);
echo $a <=> $b; // 0

$a = new ArrayObject();
$a->append(2);
$b = new ArrayObject();
$b->append(3);
echo $a <=> $b; // -1

А если у массивов разное количество элементов, то побеждает тот, у которого их больше:

echo array(3) <=> array(0, 0); // -1

Ключи массивов сравниваются по порядку, при чём по порядку из первого массива, и если при сравнении ключа нет во втором массиве, то победил первый: echo array(0 => 1, 2 => 4, 8 => 0) <=> array(0 => 1, 8 => 16, 32 => 64); // 1

При этом массив (даже пустой) всегда больше любого числа или строки.

А любой объект больше массива или строки.

Но при сравнении объекта с числом, объект приводится к типу число, а именно к единице, и дальше числа сравниваются уже с типом число.

При сравнении объекта с объектом больше всегда первый объект.