我最近在javascript中编写了很多程序,我试图在PHP中使用一些简写。
考虑这个陈述:
$value = 1;
return $value == 1 ?
'a' : $value == 2 ? 'b' : 'c';
有人能解释一下为什么这会在jQuery中返回'a'
而在php中返回'b'
吗?
答案 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')