Оператор космического корабля в PHP <=>

Оператор космического корабля в PHP <=>

Что делает оператор комбинированного сравнения в PHP

В PHP 7 появился оператор комбинированного сравнения под названием «оператор космического корабля» (<=>)

Этот оператор является трехсторонним оператором сравнения. Он делает сравнение двух выражений, т.е. двух его операндов, скажем, $a и $b, и возвращает -1, 0 или 1, когда $a соответственно меньше, равно или больше чем $b. 


$c = $a <=> $b;
//эквивалентно
$c = ($a < $b) ? -1 : (($a > $b) ? 1 : 0);

Итак, еще раз: оператор космического корабля ( <=>) возвращает -1, если левая сторона меньше, 0, если значения равны, и 1, если левая сторона больше. Он может использоваться для всех общих значений PHP с той же семантикой, что и <, <=, ==,> =,>. Этот оператор похож по поведению на strcmp() или version_compare(). Этот оператор может использоваться с целыми числами, числами с плавающей точкой, строками, массивами, объектами и т.д.

Вот еще несколько примеров:


<?php
// целые числа
echo 1 <=> 1; // 0
echo 1 <=> 2; // -1
echo 2 <=> 1; // 1

// Floats
echo 1.5 <=> 1.5; // 0
echo 1.5 <=> 2.5; // -1
echo 2.5 <=> 1.5; // 1

// Строки
echo "a" <=> "a"; // 0
echo "a" <=> "b"; // -1
echo "b" <=> "a"; // 1

// Массивы
echo [] <=> []; // 0
echo [1, 2, 3] <=> [1, 2, 3]; // 0
echo [1, 2, 3] <=> []; // 1
echo [1, 2, 3] <=> [1, 2, 1]; // 1
echo [1, 2, 3] <=> [1, 2, 4]; // -1

// Объекты
$a = (object) ["a" => "<span class="hiddenErrors" pre=""><span class="hiddenErrors" pre="">b"];
$b</span></span> = (object) ["a" => "b"];
echo $a <=> $b; // 0

$a = (object) ["a" => "b"];
$b = (object) ["a" => "c"];
echo $a <=> $b; // -1

$a = (object) ["a" => "c"];
$b = (object) ["a" => "b"];
echo $a <=> $b; // 1

// сравниваются только значения
$a = (object) ["a" => "b"];
$b = (object) ["b" => "b"];
echo $a <=> $b; // 0


Хитрый трюк

Но, оказывается, многие из нас часто забывают о цели оператора. Итак, вот удобный, но эффективный прием, чтобы вспомнить довольно быстро, что этот оператор делает.

Вам нужно заменить оператор космического корабля (<=>) знаком минус (-) . Если результат отрицательный, 0 или положительный, выражение вернет -1, 0 или 1 соответственно. Как видите, теперь легче вспомнить, когда в игру вступает аналогия.


$a = 5;
$b = 7;
$c = $a - $b;
// -2 равное -1 при <=>
$a = 3;
$b = 3;
$c = $a - $b;
// 0 равное 0 при <=>
$a = 7;
$b = 5;
$c = $a - $b;
// 2 равное 1 при <=>


Сергей Мухин

Веб-разработчик со стажем программирования более 6 лет, постоянно учусь, люблю делать новые проекты.

Есть вопросы?

Я почти всегда в режиме онлайн

Связаться со мной