我正在寻找一个很好的解释,说明使用以下哪一项的区别/优势是什么:
if (!$whatever)或者if ($whatever == FALSE)
它是相同的,但是大多数程序员更喜欢写 !$value,因为它更简洁。
由于 PHP 的类型杂耍,这些是相同的。
注意:对于“falsey”值,这两个都将返回 true。如:
0nullarray() // empty array'' // blank stringFALSE这些都转换为 boolean FALSE, which == FALSE(和!FALSEis TRUE)。
尽管问题的答案似乎很明显,但也许它可能是一个好主意:
if (boolean expression) 构造检查表达式是否等于真。
$whatever = false;
!$whatever evaluates to:
!($whatever) = true;
$whatever == false evaluates to:
($whatever == false) = true;
if(true == true);
主要区别在于!(not operator) 反转布尔值 (false -> true) 并且 if 构造检查此反转是否等于 true。
相等运算符评估 $whatever 是否等于该值(不一定是布尔值), if 构造检查相等表达式是否为真。
TJHeuvel 是正确的,在这种情况下首选使用 not 运算符,因为它更简洁。考虑在不那么琐碎的事情上使用 not 运算符,例如:
if((ProgramState == ProgramState.Ready) == false) vs
if (!(ProgramState == ProgramState.Ready)) vs
if (ProgramState != ProgramState.Ready)
后者更简洁(因此不等于运算符)。
if (!$whatever)
只需获取 $whatever 的值并将其反转。
if ($whatever == FALSE)
评估 $whatever 是否等于 FALSE
大多数人会说if ($whatever == FALSE)这是错误的,因为如果您考虑另一种情况 if ($whatever == TRUE),您会发现它很愚蠢;你可以只使用if($whatever). 当你这样做if ($whatever == FALSE)时,感觉他们是评估比较的额外不必要的步骤,即使我们不需要这样做。
他们的方式确实没有优势或劣势,因为它们具有相同的效果,但是您认为您写的其他人很愚蠢if ($whatever == FALSE)。 ($whatever == FALSE感觉不必要的复杂和鲁布戈德堡。执行起来也if ($whatever == FALSE) 可能较慢,但可以忽略不计。