比较,!==与!=

我知道!==用于比较变量类型,而!=仅用于比较值。

但是我发现很多人在比较值时使用!== ,例如:

$stuff = 'foo';
if($stuff !== 'foo') // do...

他们有这样的理由吗? 是!==!=还是什么?


如果你事先知道这两个变量是同一类型的,那么它就不会有任何区别。 我认为速度差异可以忽略不计,速度参数可以(也应该)完全忽略,你应该专注于你的应用,而不是专注于过早(和不必要的)优化。

但是,如果您确实需要和参数应该完全符合您的预期(例如,当您不希望0通过相等性测试时为=== false ),请使用===!==

正如Headshota所提到的,如果您正在处理对象,那么===检查这两个变量是否指向同一个对象实例,而==尝试通过值来匹配它们,这可能会导致意外的结果,并且应该与非常小心。 这里严格的操作符将被使用,因为它对于应用程序来说意味着什么。

要回答你的问题,如果在你的特定情况下,有些人正在使用===!==你知道这两个变量是相同的(标量)类型,那么我想这只是编码风格的问题,并显示在代码中有一点严格,强调这两个变量是相同类型的想法,可能不考虑性能。

严格的操作符必须在使用时才能使用,而不是作为性能优化。

更新 :回复速度参数,让我们考虑这个小基准:

$a = "test";
$b = "test";

$t = microtime(true);
for ($i=0; $i<1e6; $i++) {
    ($a == $b);
    // (100x the equality test, omitted for clarity purposes,
    //  to lower the speed impact of the loop itself)
    ($a == $b);
}
printf('%.3f', microtime(true)-$t);

我大致得到:

6.6 seconds for ==
4.3 seconds for ===

现在,如果我使用$b = 1; 强制隐式转换,我大致得到:

4.4 seconds for ==
2.4 seconds for ===

这意味着两种情况下的增益大约为2秒。 你可能会想,而且你会以某种方式说得对,这是对严格比较运算符速度优势的证明。 但不要忘记,我们正在谈论1e6 * 100 = 1亿次迭代。

这意味着一次严格的比较会使您的脚本速度加快0.00000002 seconds

如果您认为在编写脚本时应该考虑到这一点,那就这样做。 但是你很快就会遇到其他微小的优化,这会让你获得1000倍的速度增益,并使这种“优化”看起来毫无用处。 这是一个过早优化的教科书案例。

如果必须的话,再次使用严格的比较运算符,因为这是您的代码中的一项要求。 不要将它用于性能原因


!=只是比较值是错误的。 因为它比较类型,如果需要应用类型转换(请参阅各种类型的比较表),然后比较(转换的)值。

与此相反,如果类型不相等并且没有完成类型转换, !==失败。


所述!=操作者有点 ,因为它包括一个隐式转换如果必要的话,

!==比较之前的类型,然后值(只有类型相等)

此外,请按照此答案了解两个操作数之间差异的更多信息

链接地址: http://www.djcxy.com/p/1803.html

上一篇: comparing, !== versus !=

下一篇: Is there a difference between !== and != in PHP?