php one_liner如果与javascript相比

时间:2017-09-26 14:30:53

标签: javascript php

我最近在javascript中编写了很多程序,我试图在PHP中使用一些简写。

考虑这个陈述:

$value = 1;

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

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

3 个答案:

答案 0 :(得分:9)

在PHP中,三元运算符为left-associative(或来自the manual,稍微不那么明确。)

  

这是因为从左到右评估三元表达式

在Javascript中,三元运算符为right-associative

  

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

因此,在PHP中,您的代码执行如下:

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

在Javascript中,它执行如下:

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

因此,要获得相同的结果,您需要告诉其中任何一个像另一个一样:

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

这是(其中一个?)嵌套三元运算符是个坏主意的原因。 They're not readable并且容易出现这类错误!

答案 1 :(得分:1)

您需要将条件中的“else”部分包装在parantheses中

$value = 1;

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

这将在php中返回'a'

答案 2 :(得分:1)

使用括号确定正确的评估顺序:

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