如果您事先知道这两个变量属于同一类型,则不会有任何区别。我认为速度差异可以忽略不计,可以(并且应该)完全忽略速度参数,您应该专注于您的应用程序,而不是专注于过早(和不必要的)优化。
但是,如果您确实要求和参数应该完全符合您的期望(例如,=== false,当您不希望 0 通过相等性测试时),然后使用 === 或 @ 987654324@.
正如 Headshota 所提到的,如果您正在处理对象,那么 === 会检查这两个变量是否实际上指向同一个 对象实例,而 == 会尝试按值匹配它们,这可能会导致意想不到的结果,应谨慎使用。这里将使用 strict 运算符,因为它对应用程序有意义。
要回答您的问题,如果在您的特定上下文中有些人使用 === 或 !==,而您确实知道这两个变量属于相同(标量)类型,那么我想这只是编码风格的问题,并在代码中表现出一些严格性,强制执行两个变量属于同一类型的想法,可能没有考虑到性能。
必须使用严格的运算符当它意味着这样做时,而不是作为性能优化。
更新:回复速度参数,让我们考虑这个小基准:
$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 倍的速度增益,并且让这些“优化”看起来毫无用处。这是一个过早优化的教科书案例。
同样,如果必须,请使用严格的比较运算符,因为这是代码中的要求。 不要出于性能原因使用它。