-1

我正在寻找一个很好的解释,说明使用以下哪一项的区别/优势是什么:

if (!$whatever)或者if ($whatever == FALSE)

4

4 回答 4

3

它是相同的,但是大多数程序员更喜欢写 !$value,因为它更简洁。

于 2012-04-27T13:51:15.767 回答
3

由于 PHP 的类型杂耍,这些是相同的。

注意:对于“falsey”值,这两个都将返回 true。如:

  • 0
  • null
  • array() // empty array
  • '' // blank string
  • FALSE

这些都转换为 boolean FALSE, which == FALSE(和!FALSEis TRUE)。

于 2012-04-27T14:00:34.400 回答
3

尽管问题的答案似乎很明显,但也许它可能是一个好主意:

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)

后者更简洁(因此不等于运算符)。

于 2012-04-27T14:07:17.337 回答
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感觉不必要的复杂和鲁布戈德堡。执行起来也if ($whatever == FALSE) 可能较慢,但可以忽略不计。

于 2012-04-27T15:03:41.723 回答