想问一下<=>是什么意思?

public function compare($a, $b): int
    {
        $aDate = new \DateTime($a['date']);
        $bDate = new \DateTime($b['date']);

        return $aDate <=> $bDate;
    }

是不是等于以下这样写?

public function compare($a, $b): int
    {
        $aDate = new \DateTime($a['date']);
        $bDate = new \DateTime($b['date']);

        if ($aDate == $bDate) {
            return 0;
        }

        return ($aDate < $bDate) ? -1 : 1;
    }

除此之外,还想知道为什么他这样写能做到排序的功能呀?谢谢大神们~

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案

自己查了下资料,并且自己也写代码调试了一下。

发现return $aDate <=> $bDate;确实跟以下的写法是一样的:

public function compare($a, $b): int
    {
        $aDate = new \DateTime($a['date']);
        $bDate = new \DateTime($b['date']);

        if ($aDate == $bDate) {
            return 0;
        }

        return ($aDate < $bDate) ? -1 : 1;
    }

而至于为什么会实现排序,应该是C底层里实现的。现在我只知道当cmp_function返回1的时候,会将$aDate和$bDate的顺序对调(保持索引关联)。

最后顺便提一下,uasort(array &$array, callable $cmp_function) 传入的数组是通过引用传参的,所以调用uasort()时会直接改变原始数组。

这只是我的一点理解,要学习的地方还很多。如果有哪里不对的话希望大神能指点一下~

5年前 评论
讨论数量: 5

PHP新特性,下面引用PHP文档中的说明 PHP文档

太空船操作符(组合比较符)
太空船操作符用于比较两个表达式。当$a小于、等于或大于$b时它分别返回-1、0或1。 比较的原则是沿用 PHP 的常规比较规则进行的。

5年前 评论

$res = $ a <=> $ b
if ($a < $b) {
return -1;
} elseif ($a == $b) {
return 0;
} elseif ($a > $b) {
return 1;
}

5年前 评论

自己查了下资料,并且自己也写代码调试了一下。

发现return $aDate <=> $bDate;确实跟以下的写法是一样的:

public function compare($a, $b): int
    {
        $aDate = new \DateTime($a['date']);
        $bDate = new \DateTime($b['date']);

        if ($aDate == $bDate) {
            return 0;
        }

        return ($aDate < $bDate) ? -1 : 1;
    }

而至于为什么会实现排序,应该是C底层里实现的。现在我只知道当cmp_function返回1的时候,会将$aDate和$bDate的顺序对调(保持索引关联)。

最后顺便提一下,uasort(array &$array, callable $cmp_function) 传入的数组是通过引用传参的,所以调用uasort()时会直接改变原始数组。

这只是我的一点理解,要学习的地方还很多。如果有哪里不对的话希望大神能指点一下~

5年前 评论

PHP新特性,下面引用PHP文档中的说明 PHP文档

太空船操作符(组合比较符)
太空船操作符用于比较两个表达式。当$a小于、等于或大于$b时它分别返回-1、0或1。 比较的原则是沿用 PHP 的常规比较规则进行的。

5年前 评论

为什么会排序,是因为executeStrategy方法中执行了排序函数,采用uasort进行排序,策略就体现在采用什么样的回调函数,引入不同的排序类,就会实现不同的排序。

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!