What is <=> (the 'Spaceship' Operator) in PHP 7?

This question already has an answer here:

  • Reference — What does this symbol mean in PHP? 18 answers

  • This <=> operator will offer combined comparison in that it will :

    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
    

    The rules used by the combined comparison operator are same as the currently used comparison operators by PHP viz. < , <= , == , >= and > . Those who are from Perl or Ruby programming background may already be familiar with this new operator proposed for 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
    

    According to the RFC that introduced the operator, $a <=> $b evaluates to:

  • 0 if $a == $b
  • -1 if $a < $b
  • 1 if $a > $b
  • which seems to be the case in practice in every scenario I've tried, although strictly the official docs only offer the slightly weaker guarantee that $a <=> $b will return

    an integer less than, equal to, or greater than zero when $a is respectively less than, equal to, or greater than $b

    Regardless, why would you want such an operator? Again, the RFC addresses this - it's pretty much entirely to make it more convenient to write comparison functions for usort (and the similar uasort and uksort ).

    usort takes an array to sort as its first argument, and a user-defined comparison function as its second argument. It uses that comparison function to determine which of a pair of elements from the array is greater. The comparison function needs to return:

    an integer less than, equal to, or greater than zero if the first argument is considered to be respectively less than, equal to, or greater than the second.

    The spaceship operator makes this succinct and convenient:

    $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'];
    });
    

    More examples of comparison functions written using the spaceship operator can be found in the Usefulness section of the RFC.


    Its a new operator for combined comparison. Similar to strcmp() or version_compare() in behavior, but it can be used on all generic PHP values with the same semantics as <, <=, ==, >=, >. It returns 0 if both operands are equal, 1 if the left is greater, and -1 if the right is greater. It uses exactly the same comparison rules as used by our existing comparison operators: <, <=, ==, >= and >.

    click here to know more

    链接地址: http://www.djcxy.com/p/10206.html

    上一篇: 在foreach循环中的变量前加上&符号

    下一篇: 什么是PHP 7中的<=>('Spaceship'运算符)?