为什么===
比==
PHP 更快?
=== vs ==
,但在JavaScript中,可以在这里阅读:stackoverflow.com/questions/359494/...
为什么===
比==
PHP 更快?
=== vs ==
,但在JavaScript中,可以在这里阅读:stackoverflow.com/questions/359494/...
Answers:
因为相等运算符会==
强制转换或转换数据类型,以查看其是否等于另一个操作数,而===
(身份运算符)则无需执行任何转换,因此工作量减少,从而使速度更快。
有两件事要考虑:
如果操作数类型是不同的,那么==
并===
产生不同的结果。在这种情况下,操作员的速度并不重要;重要的是哪一个产生了预期的结果。
如果操作数类型相同,则可以使用其中一个==
,===
因为两者都会产生相同的结果。在这种情况下,两个操作员的速度几乎相同。这是因为任何一个运算符都没有执行类型转换。
我比较了以下速度:
$a == $b
与 $a === $b
$a
和$b
是随机整数[1,100]结果如下:
$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
您可以看到速度几乎相同。
我真的不知道它是否明显更快,但是在大多数语言中===是直接类型比较,而==会在必要/可能的情况下尝试强制输入类型以获得匹配。
因为在比较它们之前===
不需要强制操作数具有相同的类型。
我怀疑速度的差异是否很大。通常情况下,您应该使用更有意义的运算符。
在php(C代码)中,值是一个“类”,例如:
class value
{
$int_;
$float_;
$string_;
$array_;
$object_;
}
当你在比较$a == $b
和$a
的int
类型,会出现这样的:
if ($a->int_ == $b->int_ || $a->int_ == (int) $b->float_ || $a->int_ == (int) $b->string_ || ...)
但string
'1'
不会被转换为ASCII代码49
,这将是1
。
当你比较$a === $b
和$a
的int
类型,会出现像成才:
if ($a->int_ == $b->int_)