Всем привет и поехали. Скажу что данный оператор поддерживается версиями php7 и выше. Он по сути представляет собой три основных оператора сравнения (>, < , ==)в одном лице и в зависимости от исхода сравнения возвращает (1, -1 ,0).
Записывается он так <=>, пример:
echo 1 <=> 1; // 0
echo 2 <=> 1; // 1
echo 1 <=> 2; // -1
как видите, если два значения равны нам возвращается ноль, если первое больше второго единица, ну если второе больше первого минус единица. И так комбинаторный оператор работает со всеми числовыми типами. Здесь все просто.
Теперь давайте рассмотрим сравнение строк:
echo 'b' <=> 'b'; // 0
echo 'b' <=> 'a'; // 1
echo 'a' <=> 'b'; // -1
когда мы сравниваем строки с помощью данного оператора у нас сравниваются не сами символы, а их код. Например у символа 'a' (латиница) код 97, а у 'b' 98.
Следовательно сравнение кода символов принимаем следующий вид.
echo 98 <=> 98; // 0
echo 98 <=> 97; // 1
echo 97 <=> 98; // -1
Мы также можем сравнивать между собой массивы:
echo ['a',32,94] <=> ['a',32,94]; // 0
echo ['a',32,96] <=> ['a',32,94]; // 1
echo ['a',32,96] <=> ['b',32,96] ; // -1
здесь у нас по сути сравниваются совокупности всех элементов массива. Если массивы аналогичны по своему содержанию, то это значит что они равны и нам возвращается 0. Причем порядок следования элементов у них должен быть одинаковым. Если совокупность значений элементов первого массива больше чем второго нам возвращается единица, если наоборот то минус единица.
И напоследок давайте рассмотрим сравнение объектов между собой.
$obj_1 = (object)["el"=>"b"];
$obj_2 = (object)["el2"=>"b"];
echo $obj_1 <=> $obj_2; // 0
$obj_1 = (object)["jb"=>"c"];
$obj_2 = (object)["fd"=>"b"];
echo $obj_1 <=> $obj_2; // 1
$obj_1 = (object)["fd"=>90];
$obj_2 = (object)["gf"=>100];
echo $obj_1 <=> $obj_2; // -1
Тут следует понимать что у нас сравниваются между собой только значения свойств объекта. То есть если мы их вынесем, то получатся следующие сравнения:
echo 'b' <=> 'b'; // 0
echo 'с' <=> 'a'; // 1
echo 90 <=> 100; // -1
Что соответствует действительности.
На этом дорогие друзья у меня на сегодня все. Дальше дело за вами. Скажу что данный оператор очень хорошо себя зарекомендовал в операциях сортировки значений элементов массива. Ну я думаю на этом его применение не ограничивается. Поэтому пробуйте, пользуйтесь, внедряйте.
Я желаю вам успехов и удачи! Пока!