我正在寻找一个很好的解释,说明使用以下哪一项的区别/优势是什么:
if (!$whatever)
或者if ($whatever == FALSE)
它是相同的,但是大多数程序员更喜欢写 !$value,因为它更简洁。
由于 PHP 的类型杂耍,这些是相同的。
注意:对于“falsey”值,这两个都将返回 true。如:
0
null
array() // empty array
'' // blank string
FALSE
这些都转换为 boolean FALSE
, which == FALSE
(和!FALSE
is 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)
可能较慢,但可以忽略不计。