编程语言对运营商优先级的区别?

时间:2013-09-07 05:50:42

标签: c# php javascript

有这一行:

$var = true ? '1' : false ? '2' : '3';

在PHP中,$var在此行之后将为“2”。

但在其他一些语言(特别是基于C语言)中,结果变量将为“1”;

似乎PHP解释了这样的行:

$var = (true ? '1' : false) ? '2' : '3';

但其他语言是这样的:

string var = true ? '1' : (false ? '2' : '3');

我实际上对操作员的优先事项感到困惑。

任何想法都会有所帮助。

2 个答案:

答案 0 :(得分:2)

仅关于三元运算符?:,PHP中?:的关联性与提供相同构造的其他语言不同。 ?:在PHP中关联,在其他语言中关联。此行为是由于设计错误,并且不会根据this bug report修复。

参考:

答案 1 :(得分:1)

这是由于关联性的差异,意味着如何用该语言解析表达式,

如果您没有使用大括号指定,有两个重要的链接可以告诉您关于运算符优先级及其关联性。

php手册:http://php.net/manual/en/language.operators.precedence.php

其他http://www.tuxradar.com/practicalphp/3/12/7 enter image description here http://www.programiz.com/c-programming/precedence-associativity-operators

并且有一篇关于语言行为的好文章 在http://en.wikibooks.org/wiki/Introduction_to_Programming_Languages/Precedence_and_Associativity