4

这个问题有点先发制人,因为 php 7 还没有发布。我很好奇如何在三元运算符的上下文中处理宇宙飞船运算符。

所以如果我有一个前宇宙飞船的三元表达式,例如:

$foo = 1;
$bar = 0;
echo 'foo is ' . ( ($foo > $bar) ? 'greater than' : ( ($foo < $bar ) ? 'less than' : 'equal to' ) ) . ' bar.';

使用比较运算符的等效三元运算符是什么?三元组是否会有一些方法来处理这种情况?我经常使用三元运算符,并且很好奇是否有某种方法可以在与比较运算符相关的各种情况下简化代码。

4

2 回答 2

3

从RFC的文档中可以看出,宇宙飞船运算符主要用于处理订单。

我认为这对缩短您发布的代码没有帮助,主要是因为三元运算符需要一个布尔值,而三元运算符在两种情况下都返回一个“真”值(1 和 -1),当值是不同的。换句话说,当您将其返回值转换为布尔值时,spaceship 运算符等效于 != 运算符。

无论如何,你可以在 3v4l.org 上进行试验,就像我在这里所做的那样

于 2015-04-06T16:36:53.127 回答
0

这是一个巧妙的方法,将spaceship 运算符 <=>用作穷人的三向“三元”,也使用箭头函数和数组解构。

<?php
$relation = fn($a, $b) => [
    -1 => 'less than',
     0 => 'the same as',
     1 => 'greater than'
][$a <=> $b];

$bar = 2;

// loop $foo from 1 through 3
foreach (range(1,3) as $foo) {
  echo "foo is " . $relation($foo, $bar) . " bar.\n";
}
?>

输出:

foo is less than bar.
foo is the same as bar.
foo is greater than bar.

但请注意:它很聪明,而聪明的代码总是需要更多的脑力才能理解,这使得它的可维护性降低。所以有警告。

于 2021-11-19T20:03:49.757 回答