我正在寻找一个很好的解释,说明使用以下哪个方面的差异/优势:
if (!$whatever)
或if ($whatever == FALSE)
答案 0 :(得分:3)
它是相同的,但大多数程序员更喜欢写!$ value,因为它更简洁。
答案 1 :(得分:3)
由于PHP的类型杂耍,这些是相同的。
注意:对于“falsey”值,这两个都将返回true。如:
0
null
array() // empty array
'' // blank string
FALSE
这些全部转换为布尔FALSE
,== FALSE
(!FALSE
为TRUE
)。
答案 2 :(得分:3)
虽然问题的回答看起来很明显,但也许这可能是一个好主意:
if(boolean expression)构造检查表达式是否等于true。
$whatever = false;
!$whatever evaluates to:
!($whatever) = true;
$whatever == false evaluates to:
($whatever == false) = true;
if(true == true);
主要区别在于! (不是运算符)反转布尔值(false - > true),if构造检查此反转是否等于true。
等于运算符计算$ whatever是否等于值(不一定是布尔值),if构造检查等于表达式是否为真。
TJHeuvel在这种情况下首选使用not运算符是正确的,因为它更简洁。考虑使用not运算符来处理不那么重要的事情,例如:
if((ProgramState == ProgramState.Ready) == false) vs
if (!(ProgramState == ProgramState.Ready)) vs
if (ProgramState != ProgramState.Ready)
后者更简洁(因此不等于运算符)。
答案 3 :(得分:1)
if (!$whatever)
只需获取$ whatever的值并将其反转。
if ($whatever == FALSE)
评估$ whatever是否等于FALSE
大多数人会说if ($whatever == FALSE)
是错误的,因为如果你想到另一种情况if ($whatever == TRUE)
,你会发现它很愚蠢;你可以使用if($whatever)
。当你做if ($whatever == FALSE)
时,即使我们不需要,也会感觉他们是评估比较的额外不合理的步骤。
他们真的没有优势或劣势,因为他们有同样的效果,但你觉得写作if ($whatever == FALSE)
愚蠢的其他人。 ($whatever == FALSE
感到不必要的复杂和Rube Goldberg。 if ($whatever == FALSE)
执行速度可能较慢,但可以忽略不计。