Ale*_*lex 6 php comparison operators comparison-operators
我知道这!==也用于比较变量类型,而!=只比较值.
但我看到很多人!==在比较价值时会使用,例如:
$stuff = 'foo';
if($stuff !== 'foo') // do...
Run Code Online (Sandbox Code Playgroud)
他们这样做有什么理由吗?是!==快!=还是什么?
如果您事先知道两个变量属于同一类型,那么它不会有任何区别。我认为速度差异可以忽略不计,以至于速度参数可以(并且应该)完全忽略,您应该专注于您的应用程序,而不是过早(和不必要)的优化。
但是,如果您确实要求 和 参数应完全符合您的预期(例如,=== false当您不想0通过相等测试时),则使用===or !==。
正如 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);
Run Code Online (Sandbox Code Playgroud)
我大致得到:
6.6 seconds for ==
4.3 seconds for ===
Run Code Online (Sandbox Code Playgroud)
现在,如果我使用$b = 1;强制隐式转换,我大致得到:
4.4 seconds for ==
2.4 seconds for ===
Run Code Online (Sandbox Code Playgroud)
这意味着在这两种情况下大约都有 2 秒的增益。您可能会认为(在某种程度上您是对的),这证明了严格比较运算符的速度优势。但不要忘记我们正在谈论1e6 * 100= 1 亿次迭代。
这意味着一次严格比较将使您的脚本速度加快0.00000002 seconds.
如果您认为这是编写脚本时应该考虑的事情,那么就这样做。但您很快就会遇到其他微小的优化,这些优化将为您提供 1000 倍的速度增益,并使此类“优化”看起来毫无用处。这是过早优化的教科书案例。
同样,如果必须的话,请使用严格的比较运算符,因为这是代码中的要求。出于性能原因请勿使用它。
| 归档时间: |
|
| 查看次数: |
791 次 |
| 最近记录: |