PHP的一行代码与JavaScript相比有何区别?

3

最近我一直在编写JavaScript代码,现在我想在PHP中使用一些简写。

考虑以下语句:

$value = 1;

return $value == 1 ?
    'a' : $value == 2 ? 'b' : 'c';

请问有人能解释一下为什么在jQuery中返回'a',而在php中返回'b'吗?


1
它评估第一个条件并返回'a'。JavaScript三元运算符应该做同样的事情。 - Jay Blanchard
1
嵌套的三元运算符是一个非常糟糕的想法。 - delboy1978uk
3个回答

9

在PHP中,三元运算符是左关联的(或者从官方手册上来看,略微不太清晰)。

这是因为三元表达式从左往右进行评估。

在Javascript中,三元运算符是右关联的

注意:条件运算符是右关联的。

所以,在PHP中,您的代码执行顺序如下:

($value == 1 ?
    'a' : $value == 2) ? 'b' : 'c';

在JavaScript中,它的执行方式如下:

value == 1 ?
    'a' : (value == 2 ? 'b' : 'c');

所以,为了获得相同的结果,您需要告诉其中一个像另一个一样行事:
echo $value == 1 ?
    'a' : ($value == 2 ? 'b' : 'c');

这就是为什么嵌套的三元操作符是一个不好的主意之一。它们难以阅读且容易出现这种错误!点击这里了解更多相关信息。

1
然而,嵌套的三元运算符确实是一个糟糕的想法。 - shanechiu

1
使用括号定义正确的评估顺序:
$value == 1 ? 'a' : ($value == 2 ? 'b' : 'c')

1
您需要在条件的“else”部分中加括号。
$value = 1;

echo $value == 1 ? 'a' : ($value == 2 ? 'b' : 'c');

这将在php中返回'a'。

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