宇宙飞船运算符()

PHP 7 引入了一种新的运算符,可用于比较表达式。如果第一个表达式小于,等于或大于第二个表达式,则此运算符将返回 -1,0 或 1。

// Integers
print (1 <=> 1); // 0
print (1 <=> 2); // -1
print (2 <=> 1); // 1

// Floats
print (1.5 <=> 1.5); // 0
print (1.5 <=> 2.5); // -1
print (2.5 <=> 1.5); // 1
 
// Strings
print ("a" <=> "a"); // 0
print ("a" <=> "b"); // -1
print ("b" <=> "a"); // 1

对象不具有可比性,因此这样做会导致未定义的行为。

使用 usortuasortuksort 编写用户定义的比较函数时,此运算符特别有用。例如,给定一个要按其 weight 属性排序的对象数组,匿名函数可以使用 <=> 返回排序函数所期望的值。

usort($list, function($a, $b) { return $a->weight <=> $b->weight; });

在 PHP 5 中,这需要更复杂的表达。

usort($list, function($a, $b) {
    return $a->weight < $b->weight ? -1 : ($a->weight == $b->weight ? 0 : 1);
});