Что такое <=> («Оператор космического корабля») в PHP 7?

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 оценивает:

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

    Нажмите здесь, чтобы узнать больше