PHP 7, который выйдет в ноябре этого года, представит оператор Spaceship (< = > ). Что это такое и как оно работает?
Этот вопрос уже имеет ответ в нашем общем справочном вопросе о операторах PHP.
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. <
, <=
, ==
, >=
и >
. Те, кто имеет опыт программирования на Perl или Ruby, возможно, уже знакомы с этим новым оператором, предложенным для PHP7.
//Comparing Integers
echo 1 <=> 1; //outputs 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'];
});
Дополнительные примеры функций сравнения, написанные с помощью оператора космического корабля, можно найти в разделе Usefulness в RFC.
Это новый оператор для комбинированного сравнения. По поведению похож на strcmp()
или version_compare(), но его можно использовать со всеми общими значениями PHP с той же семантикой, что и <
, <=
, ==
, >=
, >
. Он возвращает 0
, если оба операнда равны, 1
, если левый больше, и -1
, если правый больше. Он использует те же самые правила сравнения, что и наши существующие операторы сравнения: <
, <=
, ==
, >=
и >
.