在php中如果你
echo (('a'=='a')?'A':('a'=='b')?'B':'C');
结果将是:
B
总垃圾。根据{{3}},这是因为
从左到右评估三元表达式。
这对我来说并没有真正解释它:从左到右评估('a'=='a')
所以结果是'A'
,不是!?真的不知道php如何从中获取'B'
。这种语句可用于许多语言,但不适用于php。有没有人理解这里的PHP逻辑,以及如何最好地解决这个问题?
答案 0 :(得分:1)
评估左侧的整个表达式。这些都是一样的:
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'));
答案 1 :(得分:0)
实验性地,
echo (('a'=='a')?'A':(('a'=='b')?'B':'C'))
输出
A
看起来php实现已经混乱了operator precedence,使:
的优先级高于?
,所以没有括号,
('a'=='a')?'A':('a'=='b')
组合在一起,所以表达式为:
('a'=='a')?'A':('a'=='b')?'B':'C'
评估为
('A'?'B':'C');
'B'
的结果为'A'
,0
或FALSE
不是TRUE
}。