PHP 7中的〈=>('Spaceship'操作符)是什么?[replicate]

crcmnpdw  于 2023-01-24  发布在  PHP
关注(0)|答案(3)|浏览(107)
    • 此问题在此处已有答案**:

Reference — What does this symbol mean in PHP?(24个答案)
七年前就关门了。
社区在5天前审查了是否重新讨论此问题,并将其关闭:
原始关闭原因未解决
PHP 7引入了Spaceship(〈=〉)操作符,它是什么?它是如何工作的?

cuxqih21

cuxqih211#

<=>(“Spaceship”)运营商将提供组合比较,因为它将:

Return 0 if values on either side are equal
Return 1 if the 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; //output  0
    echo 3 <=> 4; //output -1
    echo 4 <=> 3; //output  1

    //String Comparison

    echo "x" <=> "x"; //output  0
    echo "x" <=> "y"; //output -1
    echo "y" <=> "x"; //output  1
ki0zmccv

ki0zmccv2#

根据the RFC that introduced the operator$a <=> $b计算为:

  • 如果$a == $b,则为0
  • 如果$a < $b
  • 如果$a > $b,则为1

在我尝试过的每个场景中,实际情况似乎都是如此,尽管严格地说,official docs只提供了$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的有用性部分找到。

bxgwgixi

bxgwgixi3#

它是用于组合比较的新运算符,类似于strcmp()或version_compare(),但它可以用于所有具有相同语义的PHP值,如<<===>=>。如果两个操作数相等,则返回0,如果左操作数较大,则返回1,如果右边较大,则为-1。它使用的比较规则与现有比较运算符使用的规则完全相同:一米九氮一x、一米十氮一x、一米十一氮一x、一米十二氮一x和一米十三氮一x。
click here to know more

相关问题