为什么$a+=3的执行速度比$a=$a+3快


Why does $a += 3 execute faster than $a = $a + 3?

PHP手册指出:

在$a的当前值上加3可以写成"$a+=3"。这意思是"取$a的值,加上3,然后重新分配变成$a"。除了更短、更清晰之外,这也会导致执行速度更快

我曾经认为$a += 3只是$a = $a + 3的语法糖,因此它们在各个方面都应该相等

为什么与$a = $a + 3相比,$a += 3的执行速度更快?

$a = $a + 3将3添加到临时内存空间中的$a,然后将结果分配给$a;而CCD_ 6直接将3添加到$a;因此,区别在于用于临时存储的几个字节的内存,加上一个分配

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
        )
)

$a = $a + 3可能PHP VM中使用临时变量。而$a += 3可能直接执行。

PS我强调力量。非常不确定

它可能类似于C++的:++ii++:)