PHP-'!== false'和'== true'有什么区别?

时间:2018-07-12 12:05:25

标签: php evaluation

有时候我看到人们写这样的条件语句:

if($var !== false) {...}

而不是这样:

if($var == true) {...}

这些都一样,对吧?

我看到前者的使用频率更高,并且想知道这背后是否有原因,或者仅仅是个人喜好。

我很欣赏这可能是基于观点的,但是我很好奇这背后是否有合理的理由。

4 个答案:

答案 0 :(得分:4)

此:

 if($var !== false) {...}

仅在$ var恰好为false时计算为false。如果$ var是其他任何值(无论是否为“ false-y”),它将不会计算为false。

此:

if($var == true) {...}
对于任何“ false-y”值,

都将评估为false。例如0'0'

此外:

if($var === true) {...}

仅在$ var完全设置为true时,评估结果为true,而不是其他“ truthy-y”值。

因此,如果您知道$ var仅是truefalse之一,但对于其他值,它们的行为是不同的,那么您是正确的。

答案 1 :(得分:3)

$var !== false可以用于可读性或个人喜好以外的其他用途。发生错误时,各种PHP函数应返回false,并且在返回成功时也可能返回虚假的值。以strpos为例:

  

返回针相对于针所在的位置   干草堆字符串的开头(与偏移量无关)。另请注意   该字符串位置从0开始,而不是1。

     

如果找不到针,则返回FALSE。

这意味着该函数可以返回一个整数,如果在开始处找到针,则返回偶数0 ,如果没有发现针,则返回false。您必须使用!== false来检查表达式是否为false,而不是虚假的。

答案 2 :(得分:2)

他们不一样。

!==是对值和类型进行比较的严格比较。 $var必须等于(bool) false。这意味着,如果返回字符串“ false”,它将失败。

==是一个松散的比较,仅检查值。这意味着$var可以等于'(string)string'并且为true。当检查这样的变量时:

if ($var == true) {

}

您检查$var中是否包含/已定义的任何内容。只要某件事是反对的(并且不等于(bool) false),它将通过条件。这意味着“(string)false”将通过该条件。

没有任何函数(例如strpos)返回(bool) false,因此对于这些函数而言,最好执行第一个(IMO)。

答案 3 :(得分:-1)

  

使用==

首先,它对变量进行类型转换并比较这些值是否相同。 您可以在以下示例中看到

var_dump(0==FALSE);  // ( 0 == ( int ) false  )  bool(true) 
var_dump(0=='anystring'); //  ( 0 == ( int ) 'anystring' ) bool(true)  
  

使用===

它也比较值和类型

所以应该是

var_dump(  gettype( 0  )  == gettype( false  ) && 0 == false  )

如果类型检查失败,这会更快,因为如果类型检查失败,它不必为进一步的“值检查”键入值。