为什么在PHP中===比==快?
为什么在PHP中===
比==
快?
因为相等运算符==
强制或暂时转换数据types以查看它是否与另一个操作数相等,而===
(身份运算符)不需要进行任何转换,因此工作量减less,从而使其更快。
===
不执行types转换,所以0 == '0'
计算结果为true
,但0 === '0'
为false
。
首先,===检查两个参数是否是相同的types – 所以在实际执行比较之前,数字1和string“1”在types检查上失败。 另一方面,==不会首先检查types,然后将两个参数转换为相同的types,然后进行比较。
因此,===更快地检查失败情况
有两件事情要考虑:
-
如果操作数types不同,则
==
和===
产生不同的结果 。 在这种情况下,运营商的速度并不重要, 重要的是哪一个产生预期的结果。 -
如果操作数types相同,则可以使用
==
或===
因为两者都会产生相同的结果 。 在这种情况下,两个运营商的速度几乎相同。 这是因为任何一个操作员都不能执行types转换。
我比较的速度是:
-
$a == $b
vs$a === $b
-
$a
和$b
是随机整数[1,100] - 这两个variables生成并比较了一百万次
- testing运行了10次
结果如下:
$a == $b $a === $b --------- --------- 0.765770 0.762020 0.753041 0.825965 0.770631 0.783696 0.787824 0.781129 0.757506 0.796142 0.773537 0.796734 0.768171 0.767894 0.747850 0.777244 0.836462 0.826406 0.759361 0.773971 --------- --------- 0.772015 0.789120
你可以看到速度几乎相同。
我真的不知道它是否显着更快,但是===在大多数语言中是直接types比较,而==会尝试在必要/可能的情况下进行types强制来获得匹配。
在比较之前,==会带来更大的types转换开销。 ===首先检查types,然后继续而不必进行任何types转换。
因为===
在比较它们之前不需要强制操作数是相同的types 。
我怀疑速度的差异是非常多的。 在正常情况下,您应该使用更合理的操作符。
总之===更快,因为不转换数据types来查看两个variables是否具有相同的值,但是当您需要查看两个variables是否具有相同的值时,您将使用==如果doesen't mather什么types是variables,或===如果重要的话也是variables的types。
如果testing结果是正确的,那么它一定是一个编译器问题,
处理器将在一个时钟周期内完成所要求的任务
如果做得less,那么做起来会更快
加成:
实际上,如果编译器已经创build了大量的机器代码来处理,那么如果它已经添加了大量的东西来处理需要比较的数据types,那么删除一个“次要”IF将不会改变速度在所有。
如果有人仍然读这个,那么我有兴趣进行更多的讨论。
菲尔