比较,!==与!=
我知道!==
用于比较变量类型,而!=
仅用于比较值。
但是我发现很多人在比较值时使用!==
,例如:
$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