如何在三元运算符中处理比较运算符(太空船运算符)?

4

这个问题有点超前,因为 php 7 还没有发布。我想知道在三元运算符的情况下如何处理太空船运算符。

所以如果我有一个带有太空船运算符的三元表达式,例如:

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

使用比较运算符的三元操作符是什么?三元操作符是否有处理此情况的手段?我经常使用三元操作符,好奇是否有一些方法可以简化各种实例中与比较运算符相关的代码。


把你的字符串放进一个数组里,使用太空船运算符的结果(可能加上1)来索引该数组? - Ben Voigt
这个问题有点超前,我认为现在开始询问和尝试php 7的东西是最好的时机。由于发布可能会在今年,所以我更喜欢现在开始使用php 7而不是等待5年直到每个人都使用它。FYI:您可以在此处测试php 7内容:http://3v4l.org/ 或者您甚至可以下载php解析器并安装它:https://github.com/nikic/PHP-Parser/releases/tag/v1.2.2 - Rizier123
2个回答

3
其RFC文档中可以看出,宇宙船操作符主要用于处理排序问题。我认为它不会有助于缩短您发布的代码,因为三元运算符期望一个布尔值,并且在值不同时,三元运算符返回一个“true”值(1和-1)。换句话说,当您将其返回值强制转换为布尔值时,宇宙船操作符等同于!=操作符。无论如何,您可以在3v4l.org上进行实验,就像我这里所做的那样。

0

这里有一个巧妙的方法,使用太空船运算符<=>作为穷人版的三元运算符,同时使用箭头函数和数组解构。

<?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.

但要注意:它很聪明,聪明的代码总是需要更多的脑力来理解,这使得它不太易于维护。所以这里有个警告。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接