[英]Fixing broken chained/stacked php ternary operator
在PHP中,如果你
echo (('a'=='a')?'A':('a'=='b')?'B':'C');
结果将是:
B
这是完全垃圾 。 根据PHP文档(示例#3),这是因为
三元表达式从左到右求值。
这并不能真正为我解释:从左到右求值('a'=='a')
所以结果是'A'
,不! 真的不知所措,无法理解php如何从中获取'B'
。 这类语句可以在许多语言中运行,但不适用于php。 有谁知道这里的PHP逻辑,以及如何最好地解决这个问题在PHP?
评估左侧的整个表达式。 这些是相同的:
echo( ('a' == 'a') ? 'A' : ('a' == 'b') ? 'B' : 'C');
echo((('a' == 'a') ? 'A' : ('a' == 'b')) ? 'B' : 'C');
以下表达式的计算结果为A
:
('a' == 'a') ? 'A' : ('a'=='b');
该表评估为B
:
('A' ? 'B' : 'C');
如果移动括号,表达式将按您期望的方式求值:
echo(('a' == 'a') ? 'A' : (('a' == 'b') ? 'B' : 'C'));
实验上,
echo (('a'=='a')?'A':(('a'=='b')?'B':'C'))
输出
A
看来php实现已将运算符的优先级混为一谈,给出了:
比?
,因此没有括号,
('a'=='a')?'A':('a'=='b')
被组合在一起,因此表达式:
('a'=='a')?'A':('a'=='b')?'B':'C'
评估为
('A'?'B':'C');
结果为'B'
(因为'A'
不是0
或FALSE
,因此是TRUE
)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.