php 7中的”宇宙飞船”操作符<=>是什么?

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

本问题已经有最佳答案,请猛点这里访问。

PHP会出来7,其中今年将在十一月的spaceship介绍(< = >)操作员。它是什么和如何做这项工作?

<字幕>这个问题已经有一个答案在我们的一般问题关于PHP参考<字幕> /算子。


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

1
2
3
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 viz当前使用的比较运算符相同。<<===>=>。那些来自Perl或Ruby编程背景的人可能已经熟悉这个为PHP7建议的新操作符。

1
2
3
4
5
6
7
8
9
10
11
   //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将返回。

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

不管怎样,你为什么要这样的接线员?同样,RFC解决了这一问题——它几乎完全是为了更方便地为usort和类似的uasortuksort编写比较函数。

usort将数组作为第一个参数进行排序,并将用户定义的比较函数作为第二个参数。它使用该比较函数来确定数组中的一对元素中哪个更大。比较函数需要返回:

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.

宇宙飞船操作员使这一点简洁方便:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
$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。它使用的比较规则与我们现有的比较运算符完全相同:<<===>=>

单击此处了解更多信息