有时候我看到人们写这样的条件语句:
if($var !== false) {...}
而不是这样:
if($var == true) {...}
这些都一样,对吧?
我看到前者的使用频率更高,并且想知道这背后是否有原因,或者仅仅是个人喜好。
我很欣赏这可能是基于观点的,但是我很好奇这背后是否有合理的理由。
答案 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仅是true
或false
之一,但对于其他值,它们的行为是不同的,那么您是正确的。
答案 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 )
如果类型检查失败,这会更快,因为如果类型检查失败,它不必为进一步的“值检查”键入值。