原始问题
我前段时间在一篇文章中读到,我找不到在进行比较时,由于某种原因顺序很重要。
我找不到有关 PHP 中比较顺序主题的任何信息。
它显然不会做出戏剧性的变化,但我很想知道这是否有任何优点。
在整个项目中,我正在进行比较,$x === true
.
以相反的顺序进行比较有什么区别,就像在true === $x
中一样?
结论
显然,我在原始问题中提到的是一种称为"尤达条件"的编程风格。
这个维基页面对这种风格给出了很好的解释。
这个答案让我理解了这个概念,只是注意到那里有一个小错误。
以下是我对它的看法:
使用此样式的主要原因是避免在打算与==
进行比较时意外分配=
。
如果要检查变量是否松散地具有与比较变量相同的值,请使用:
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
在使用尤达风格的上下文中与否并不重要,因为这不是严格比较的真正问题,因为很难将
=
与===
混淆,但是如果您将其用于==
那么也使用它===
保持一致。
总而言之,我认为尤达符号的优点在于它强调了在条件下比较和分配之间的区别。
这些被称为"尤达比较"。对于===
和==
来说,这无关紧要,但请考虑以下几点:
if($a = 0)
在本例中,$a
设置为零,而不是比较。此外,您认为您正在进行的比较根本不会评估,但比较操作将像进行比较一样进行。它总是会落到false
翻转它:
if(0 = $a)
现在将抛出一个错误。