繁体   English   中英

修复损坏的链式/堆叠式PHP三元运算符

[英]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'不是0FALSE ,因此是TRUE )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM