为什么我们对此进行评估:TRUE AND TRUE ? 'yes' : 'no'
等于TRUE
且不等于yes
并在评估时:(TRUE AND TRUE) ? 'yes' : 'no'
等于yes
最后,当我们尝试评估时:TRUE && TRUE ? 'yes' : 'no'
等于yes
这是一个php bug还是什么? TIA:)
答案 0 :(得分:5)
信任语言。无论你观察到什么行为都发生了,因为这是你的代码所做的。如果你看到一个错误,它的错误就是99.99%,而不是PHP的错误。
凭借这种心态,你可以取得进步。
查看纯粹推理向我们展示的内容:
TRUE AND TRUE ? 'yes' : 'no'
和
(TRUE AND TRUE) ? 'yes' : 'no'
行为不同。
因为我们所做的只是改变了评估的顺序,这意味着第一个表达式必须解析为:
TRUE AND (TRUE ? 'yes' : 'no')
事实上,TRUE and 'yes'
是TRUE
。
规则有时很复杂。在这种情况下,您必须知道operator precedence以及值converted to boolean.
的方式manual特别提到了差异。
"和"的两种不同变体的原因和"或"运营商是他们以不同的优先权运作。 (参见操作员优先顺序。)
如果您不确定优先顺序,最好用括号明确标记您的意图。至少,这就是我的所作所为。如果它对我来说不明显,也可能会给其他人带来麻烦。当然,如果您不必背诵规则,则可以更快地阅读代码。不要滥用这个,但代码中不应该提到明显的事情,不要因为你懒得学习基本规则而增加句法噪音;)
从实际角度来看,最好避免代码中出现AND
。