PHP 5982 ~ 1 мин.

Оператор космического корабля в 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 при <=>


Что думаешь?

Aven19.06.2023

Теперь всё понятно, спасибо за помощь в этом вопросе.

Категории
  • PHP 68
  • Заметки 18
  • Безопасность 4
  • Флуд 2
  • Nginx 2
  • ИТ новости 2
  • Видео 1
  • Docker 1
  • Roadmap 1
  • Архитектура 0

Хочешь поддержать сайт?

Делаем из мухи слона

sergeymukhin.com

персональный блог о веб-разработке от Сергея Мухина. Блог был основан в 2018 году, и собирался уделять основное внимание последним тенденциям, учебным пособиям, а также советам и рекомендациям, позволяющим начинающим девелоперам встать быстрее на правильную дорогу веб разработки, но что-то пошло не так 😃

Релизы PHP 8.4

Дата Релиз
4 Июля 2024 Альфа 1
18 Июля 2024 Альфа 2
1 Августа 2024 Альфа 3
13 Августа 2024 Feature freeze
15 Августа 2024 Бета 1
29 Августа 2024 Бета 2
12 Сентября 2024 Бета 3
26 Сентября 2024 RC 1
10 Октября 2024 RC 2
24 Октября 2024 RC 3
7 Ноября 2024 RC 4
21 Ноября 2024 GA

Что нового?