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

PHP - What is the difference between '!== false' and ' == true'?

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

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

而不是像这样:

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

这些是一样的吧?

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

我明白这可能是基于意见,但我很好奇这背后是否有正当理由。

它们不一样。

!==是比较值和类型的严格比较。 $var 必须等于 (bool) false。这意味着如果 'false' 的字符串被 returned 它将失败。

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

if ($var == true) {

}

你检查 $var 是否在 it/defined 中有任何东西。只要某事反对它(并且不等于 (bool) false),它就会通过条件。这意味着 '(string) false' 将通过该条件。

一些功能一文不值(比如 strpos)return (bool) false 所以做第一个(IMO)对这些功能更好。

这个:

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

仅当 $var 恰好为 false 时才会计算为 false。如果 $var 是任何其他值,它不会评估为 false,无论 'false-y' 与否。

这个:

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

将对任何 'false-y' 值计算为 false。例如0, '0'.

另外这个:

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

只有当 $var 精确设置为 true 时才会计算为 true,而不是其他 'truthy-y' 值。

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

$var !== false 可用于可读性或个人喜好以外的其他用途。在出现错误 时,各种 PHP 函数预计会 return false 并且它们也可能 return 成功时的虚假值 。以strpos为例:

Returns the position of where the needle exists relative to the beginning of the haystack string (independent of offset). Also note that string positions start at 0, and not 1.

Returns FALSE if the needle was not found.

这意味着该函数可以 return 一个整数,甚至 0 如果在开头找到了针 ,并且 false 如果没有找到针。您必须使用 !== false 来检查表达式是否为 false,而不是 falsy。

When you use ==

首先,它对变量进行类型转换并比较那些值是否相同。 你可以在下面的例子中看到

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

When you use ===

它也比较值和类型

所以它会像

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

如果您的类型检查失败,这会更快,因为如果类型检查失败,它不必进一步 'value check' 对值进行类型转换。