猿问

PHP - 条件中的值顺序 AKA 尤达表示法

原始问题

我前段时间在一篇文章中读到,由于某种原因,我找不到在进行比较时顺序很重要。
我找不到任何关于PHP中比较顺序的信息。
它显然不会做出戏剧性的变化,但我很好奇这是否有任何优点。

在整个项目中,我正在研究的比较是作为.
以相反的顺序进行比较是否有任何区别,例如?$x === truetrue === $x

结论

显然,我在原始问题中提到的是一种称为“尤达条件”的编程风格。
这个wiki页面给出了关于这种风格的很好的解释。
这个答案让我理解了这个概念,只是注意到那里有一个小错误。

以下是我对此的看法:

使用此样式的主要原因是避免意外分配,当您打算与 进行比较时。===

  • 如果要检查变量是否与进行比较时的值相同,请使用:

    if(false == $var) // evaluates to true if $var is equal to false

    if($var == false) // evaluates to true if false is equal to $var

    防止

    if($var = false) // assigns false to $var and evaluates to false

    if(false = $var) // is a syntax error
  • 如果要检查变量是否与进行比较时的值严格相同,请使用:

    if(false === $var) // evaluates to true if $var is identical to false

    if($var === false) // evaluates to true if false is identical to $var

    在使用尤达风格的上下文中,这并不重要,因为严格比较并不是一个真正的问题,因为它很难混淆,但如果你使用它,那么也使用它来保持一致。=========

总而言之,我认为尤达符号的优点在于它在一个条件下的比较和分配之间所强调的区别。


BIG阳
浏览 107回答 1
1回答

茅侃侃

这些被称为“尤达比较”。因为这并不重要,但请考虑以下几点:=====if($a = 0)在这种情况下,设置为零,而不是比较。此外,您认为您正在进行的比较根本不会进行评估,但比较操作将继续进行,就好像进行了比较一样。它总是会落入错误的翻转它:$aif(0 = $a)现在将引发错误。
随时随地看视频慕课网APP
我要回答