PHP的one_liner如果相比于JavaScript的
问题描述:
我最近编程的大量使用JavaScript和我试图在PHP中使用一些速记。PHP的one_liner如果相比于JavaScript的
此声明:
$value = 1;
return $value == 1 ?
'a' : $value == 2 ? 'b' : 'c';
任何人都可以解释我为什么这个返回的jQuery 'a'
和'b'
在PHP?
答
在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并且容易出现这样的错误!
答
你需要用条件的“其他”部分中括号
$value = 1;
echo $value == 1 ? 'a' : ($value == 2 ? 'b' : 'c');
这将返回“A”在PHP
答
用括号做明确评价的正确顺序:
$value == 1 ? 'a' : ($value == 2 ? 'b' : 'c')
它评估第一个条件并返回'a'。 JavaScript三元组应该做同样的事情。 –
嵌套三元组是一个非常糟糕的主意 – delboy1978uk