PHP手册指出:
将 $a 的当前值加 3 可以写成 '$a += 3'。这意味着“取 $a 的值,将其加 3,然后将其分配回 $a”。除了更短更清晰之外,这还可以加快执行速度。
我曾经认为这$a += 3
只是语法糖$a = $a + 3
,因此它们应该在所有方面都是平等的。
为什么$a += 3
与 相比会导致更快的执行$a = $a + 3
?
PHP手册指出:
将 $a 的当前值加 3 可以写成 '$a += 3'。这意味着“取 $a 的值,将其加 3,然后将其分配回 $a”。除了更短更清晰之外,这还可以加快执行速度。
我曾经认为这$a += 3
只是语法糖$a = $a + 3
,因此它们应该在所有方面都是平等的。
为什么$a += 3
与 相比会导致更快的执行$a = $a + 3
?
$a = $a + 3
将 3 加到临时内存空间中的 $a 中,然后将结果分配给 $a;while$a += 3
直接将 3 加到 $a 中;所以区别是几个字节的内存用于临时存储,加上一个赋值
PHP 是一个解释器,因此,为了获得良好代码的良好性能,它必须限制自己不进行“有效”的复杂优化(编译器可以这样做,因为他们有时间)。
自汇编器时代以来,它比它的等值总和要好,只是因为它使用的资源更少。
在 PHP 的情况下,它标记为,也最好由 PHP 可执行文件执行,另一方面,总和,嗯,它像总和一样被标记(并执行)。=+
=+
T_PLUS_EQUAL
继两者的“转储”之后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
)
)
$a = $a + 3
可能会在PHP VM中使用临时变量。虽然$a += 3
可以直接执行。
PS:我强调力量。很不确定...
它可能类似于C++
's: ++i
vs. i++
:)