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, если правый больше. Он использует те же самые правила сравнения, что и наши существующие операторы сравнения: <, <=, ==, >= и >.