PHP的one_liner如果相比于JavaScript的

PHP的one_liner如果相比于JavaScript的

问题描述:

我最近编程的大量使用JavaScript和我试图在PHP中使用一些速记。PHP的one_liner如果相比于JavaScript的

此声明:

$value = 1; 

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

任何人都可以解释我为什么这个返回的jQuery 'a''b'在PHP?

+1

它评估第一个条件并返回'a'。 JavaScript三元组应该做同样的事情。 –

+1

嵌套三元组是一个非常糟糕的主意 – delboy1978uk

在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

然而,嵌套三元组真是一个可怕的想法。 – shanechiu

+0

晶莹剔透!谢谢 – clod986

你需要用条件的“其他”部分中括号

$value = 1; 

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

这将返回“A”在PHP

用括号做明确评价的正确顺序:

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