PHP manual声明:
在$ a的当前值中加3可以写成' $ a + = 3'。这个 准确地说"取$ a的值,加3,然后再分配 进入$ a"。 除了更短更清晰之外,还会产生这种结果 加快执行速度。
我曾经认为$a += 3
仅仅是$a = $a + 3
的语法糖,因此它们在所有方面都应该相等。
与$a += 3
相比,为什么$a = $a + 3
会导致执行速度更快?
答案 0 :(得分:4)
$a = $a + 3
在临时内存空间中添加3到$ a,然后将结果分配给$ a;而$a += 3
直接将3加到$ a;所以差异是用于临时存储的几个字节的内存,加上一个赋值
答案 1 :(得分:3)
PHP是一名翻译,因此,为了良好代码具有良好性能,它必须将自己限制为不要做“有效”的复杂选择(因为编译器可以做,因为他们有时间)。
从集合体的时间开始,最好是=+
而不是它的等价金额,因为它使用的资源更少。
在PHP的情况下,它将=+
标记为T_PLUS_EQUAL
,也最好由PHP可执行文件执行,另一方面,总和,好吧,它被标记化(并执行)就像一个总和。
来自token_get_all()
<?php echo '<pre>';
print_r(array_map(function($t){if(is_array($t)) $t[0]=token_name($t[0]); return $t;},
token_get_all('<?php $a=$a+3 ?>')));
print_r(array_map(function($t){if(is_array($t)) $t[0]=token_name($t[0]); return $t;},
token_get_all('<?php $a+=3 ?>')));
// results in:
?>
Array
(
[0] => Array
(
[0] => T_OPEN_TAG
[1] => 1
)
[1] => Array
(
[0] => T_VARIABLE
[1] => $a
[2] => 1
)
[2] => =
[3] => Array
(
[0] => T_VARIABLE
[1] => $a
[2] => 1
)
[4] => +
[5] => Array
(
[0] => T_LNUMBER
[1] => 3
[2] => 1
)
[6] => Array
(
[0] => T_WHITESPACE
[1] =>
[2] => 1
)
[7] => Array
(
[0] => T_CLOSE_TAG
[1] => ?>
[2] => 1
)
)
Array
(
[0] => Array
(
[0] => T_OPEN_TAG
[1] => 1
)
[1] => Array
(
[0] => T_VARIABLE
[1] => $a
[2] => 1
)
[2] => Array
(
[0] => T_PLUS_EQUAL /// <= see here!!!!!
[1] => +=
[2] => 1
)
[3] => Array
(
[0] => T_LNUMBER
[1] => 3
[2] => 1
)
[4] => Array
(
[0] => T_WHITESPACE
[1] =>
[2] => 1
)
[5] => Array
(
[0] => T_CLOSE_TAG
[1] => ?>
[2] => 1
)
)
答案 2 :(得分:0)
$a = $a + 3
可能在 PHP VM 中使用临时变量。
虽然$a += 3
可能直接执行。
PS :我强调可能性。非常不确定......
可能类似于C++
:++i
与i++
:)