PHP 7, который выйдет в ноябре этого года, представит оператор Spaceship (<=>). Что это такое и как оно работает?
Этот вопрос уже имеет ответ в нашем общем справочном вопросе о PHP-операторах.
Этот оператор <=>
предложит комбинированное сравнение, в котором он будет:
Return 0 if values on either side are equal Return 1 if value on the left is greater Return -1 if the value on the right is greater
Правила, используемые комбинированным оператором сравнения, такие же, как и используемые в настоящее время операторы сравнения PHP. <
, <=
, ==
, >=
и >
. Возможно, уже знакомы с этим новым оператором, предлагаемым для PHP7.
//Comparing Integers echo 1 <=> 1; //ouputs 0 echo 3 <=> 4; //outputs -1 echo 4 <=> 3; //outputs 1 //String Comparison echo "x" <=> "x"; // 0 echo "x" <=> "y"; //-1 echo "y" <=> "x"; //1
Согласно RFC, который представил оператора , $a <=> $b
оценивает:
$a == $b
$a < $b
$a > $b
который, как представляется, имеет место на практике в каждом сценарии, который я пробовал, хотя строго официальные документы предлагают лишь слегка более слабую гарантию возврата $a <=> $b
целое число меньше, равно или больше нуля, когда
$a
соответственно меньше, равно или больше$b
Независимо от того, зачем вам такой оператор? Опять же, RFC обращается к этому – это в значительной степени полностью упрощает запись функций сравнения для usort
(и аналогичного uasort
и uksort
).
usort
принимает массив для сортировки в качестве его первого аргумента и пользовательскую функцию сравнения в качестве второго аргумента. Он использует эту функцию сравнения, чтобы определить, какая из пары элементов из массива больше. Функция сравнения должна возвращать:
целое число, меньшее, равное или большее нуля, если первый аргумент считается менее чем, равным или большим, чем второй.
Оператор космического корабля делает это кратким и удобным:
$things = [ [ 'foo' => 5.5, 'bar' => 'abc' ], [ 'foo' => 7.7, 'bar' => 'xyz' ], [ 'foo' => 2.2, 'bar' => 'efg' ] ]; // Sort $things by 'foo' property, ascending usort($things, function ($a, $b) { return $a['foo'] <=> $b['foo']; }); // Sort $things by 'bar' property, descending usort($things, function ($a, $b) { return $b['bar'] <=> $a['bar']; });
Дополнительные примеры функций сравнения, написанные с помощью оператора космического корабля, можно найти в разделе « Полезность » RFC.
Его новый оператор для комбинированного сравнения. Подобно strcmp () или version_compare () в поведении, но его можно использовать для всех общих значений PHP с той же семантикой, что и <, <=, ==,> =,>. Он возвращает 0, если оба операнда равны, 1, если слева больше, и -1, если справа больше. Он использует те же правила сравнения, что и наши существующие операторы сравнения: <, <=, ==,> = и>.
Нажмите здесь, чтобы узнать больше