在php中使用===而不是==的重要性!

Bak*_*yor 10 php comparison-operators

今天只有我注意到并发现了使用===运算符的重要性.您可以在以下示例中看到它:

$var=0;
if ($var==false) echo "true"; else echo "false";  //prints true
$var=false;
if ($var==false) echo "true"; else echo "false";  //prints true
$var=0;
if ($var===false) echo "true"; else echo "false";  //prints false
$var=false;
if ($var===false) echo "true"; else echo "false";  //prints true 
Run Code Online (Sandbox Code Playgroud)

问题是,是否有任何使用===运算符而不是使用==运算符的情况?

Fel*_*ing 13

当然,只有一个例子: array_search()

警告

此函数可能返回布尔值FALSE,但也可能返回一个非布尔值,其值为FALSE,例如0或"".有关更多信息,请阅读有关布尔值的部分.使用===运算符测试此函数的返回值.

基本上,如果您使用任何函数返回成功但FALSE失败的值,您应该检查结果===以确定(否则为什么会有一个大的红色警告框?;))


进一步的实例:next(), 或作为还提到字符串用作,等current()
strpos()stripos()

即使substr()没有明确提及:

返回字符串的提取部分或失败时返回FALSE.

但如果提取的部分是"0"什么呢?它也评估FALSE,但它不是一个错误.


art*_*oex 7

总是选择===结束,==除非你绝对确定你需要==,因为==不是传递性的.而这反过来对你的代码推理很重要.

请考虑以下代码段

if ( $a == $b && $b == $c ) {
    // [1] assert: $a == $c
}
Run Code Online (Sandbox Code Playgroud)

任何人都会从if条件推断出断言$a == $c是真的,因为我们习惯于等式关系是传递的.但这并不成立==,例如:

$a = "0";
$b = 0;
$c = null;
Run Code Online (Sandbox Code Playgroud)

现在想想在编写代码时我们经常(有时无意识地)做出这种假设.这可能会导致严重的错误.


小智 6

在strpos()找到字符串时你有0,在有错误时你有0.你必须===用来检查差异.