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

这个问题在这里已经有了答案:

  • 参考 - 这个符号在PHP中的含义是什么? 18个答案

  • <=>运营商将提供组合比较,因为它将:

    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; //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编写比较函数(以及类似的uasortuksort )。

    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。 它使用与我们现有的比较运算符完全相同的比较规则:<,<=,==,> =和>。

    点击这里了解更多

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

    上一篇: What is <=> (the 'Spaceship' Operator) in PHP 7?

    下一篇: Supply Ruby Array Select A Dynamic Block