如果我们对此进行评估,为什么如此:是真的吗? '是' :'不'等于TRUE

时间:2014-12-11 11:33:48

标签: php

为什么我们对此进行评估:TRUE AND TRUE ? 'yes' : 'no'等于TRUE且不等于yes

并在评估时:(TRUE AND TRUE) ? 'yes' : 'no'等于yes

最后,当我们尝试评估时:TRUE && TRUE ? 'yes' : 'no'等于yes

这是一个php bug还是什么? TIA:)

1 个答案:

答案 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