0

有这一行:

$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');

我实际上对运营商的优先级感到困惑。

任何想法都会有所帮助。

4

2 回答 2

2

仅就三元运算符?:而言,?:PHP 中的关联性与其他提供相同结构的语言不同。在 PHP 中?:关联的,在其他语言中是右关联的。此行为是由于设计不当造成的,不会根据此错误报告进行修复。

参考:

于 2013-09-07T06:05:41.393 回答
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上有一篇关于语言行为的好文章

于 2013-09-07T06:12:15.307 回答