有这一行:
$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');
我实际上对操作员的优先事项感到困惑。
任何想法都会有所帮助。
答案 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 http://www.programiz.com/c-programming/precedence-associativity-operators
并且有一篇关于语言行为的好文章 在http://en.wikibooks.org/wiki/Introduction_to_Programming_Languages/Precedence_and_Associativity