如果您事先知道两个变量是相同类型的,则不会有任何区别。我认为速度差异非常微小,速度论点可以(并且应该)完全忽略,您应该专注于您的应用程序,而不是专注于过早(和不必要的)优化。
但是,如果您确实需要一个参数与您期望的完全相同(例如,当您不希望0通过等式测试时,“=== false”),则使用“===”或“!==”。
正如Headshota所提到的,如果您正在处理对象,则“===”检查这两个变量是否实际指向相同的对象实例,而“==”尝试按值匹配它们,这可能会导致意外结果,应谨慎使用。在这里,将使用严格运算符,因为它对应用程序具有意义。
回答您的问题,如果在您特定的上下文中,一些人在您知道两个变量都是相同(标量)类型的情况下使用“===”或“!==”,那么我想这只是一种编码风格,并在代码中显示了一些严格性,强制执行两个变量都是相同类型的想法,可能并不考虑性能。
当它有意义时必须使用严格操作符,而不是作为性能优化。
更新:为了回答速度论点,让我们考虑这个小基准测试:
$a = "test";
$b = "test";
$t = microtime(true);
for ($i=0; $i<1e6; $i++) {
($a == $b);
($a == $b);
}
printf('%.3f', microtime(true)-$t);
I roughly get:
6.6 seconds for ==
4.3 seconds for ===
现在,如果我使用
$b = 1;
强制进行隐式转换,大致会得到以下结果:
4.4 seconds for ==
2.4 seconds for ===
这意味着在两种情况下大约可以节省2秒的时间。你可能会认为,在某种程度上这证明了严格比较运算符的速度优势,这是正确的。但不要忘记我们正在谈论
1e6 * 100
=1亿次迭代。
这意味着单个严格比较将使您的脚本加速
0.00000002秒
。
如果您认为在编写脚本时应该考虑这一点,请这样做。但很快您就会遇到其他微小的优化,这将使您获得比此类“优化”更高1000倍的速度增益。这是过早优化的典型案例。
再次强调,如果您必须使用严格比较运算符,请使用它,因为这是您代码的要求。不要出于性能原因使用它。