Php 为什么$a+;=3执行速度超过$a=$a+;3.

Php 为什么$a+;=3执行速度超过$a=$a+;3.,php,expression,Php,Expression,声明: 将3添加到$a的当前值可以写入“$a+=3”。这 意思是“取$a的值,加上3,然后重新分配” 变成一美元一张”除了更短更清晰之外,这也会导致 执行速度更快。 我曾经认为,$a+=3仅仅是$a=$a+3的语法糖,因此它们在所有方面都应该相等 为什么$a+=3比$a=$a+3执行得更快?$a=$a+3在临时内存空间中将3添加到$a,然后将结果分配给$a;而$a+=3直接将3添加到$a;因此,不同之处在于临时存储的内存只有几个字节,加上赋值$a=$a+3可能会在PHP虚拟机中使用临时变量。 而

声明:

将3添加到$a的当前值可以写入“$a+=3”。这 意思是“取$a的值,加上3,然后重新分配” 变成一美元一张”除了更短更清晰之外,这也会导致 执行速度更快。

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


为什么
$a+=3
$a=$a+3
执行得更快?

$a=$a+3
在临时内存空间中将3添加到$a,然后将结果分配给$a;而
$a+=3
直接将3添加到$a;因此,不同之处在于临时存储的内存只有几个字节,加上赋值

$a=$a+3
可能会在PHP虚拟机中使用临时变量。 而
$a+=3
可能会直接执行

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


它可能类似于
C++
:与
i++
相比
i++
:)

PHP是一个解释器,因此,为了对好的代码有好的性能,它必须将自身限制为不做“有效的”复杂优化(就像编译器可以做的那样,因为他们有时间去做)。
自从一个编译程序出现以来,与其使用等价的和,不如使用
=+
,因为它使用的资源更少。
在PHP的情况下,它将
=+
标记为
T_PLUS_EQUAL
,也最好由PHP可执行文件执行,另一方面,和,它被标记(和执行)就像和一样

从两个
token\u get\u all()


排列
(
[0]=>阵列
(
[0]=>T\u打开\u标签
[1] =>  1
)
[1] =>阵列
(
[0]=>T_变量
[1] =>一美元
[2] => 1
)
[2] => =
[3] =>阵列
(
[0]=>T_变量
[1] =>一美元
[2] => 1
)
[4] => +
[5] =>阵列
(
[0]=>T\u LNUMBER
[1] => 3
[2] => 1
)
[6] =>阵列
(
[0]=>T_空格
[1] =>  
[2] => 1
)
[7] =>阵列
(
[0]=>T\U关闭\U标签
[1] => ?>
[2] => 1
)
)
排列
(
[0]=>阵列
(
[0]=>T\u打开\u标签
[1] =>  1
)
[1] =>阵列
(
[0]=>T_变量
[1] =>一美元
[2] => 1
)
[2] =>阵列
(
[0]=>T_加上_等于///+=
[2] => 1
)
[3] =>阵列
(
[0]=>T\u LNUMBER
[1] => 3
[2] => 1
)
[4] =>阵列
(
[0]=>T_空格
[1] =>  
[2] => 1
)
[5] =>阵列
(
[0]=>T\U关闭\U标签
[1] => ?>
[2] => 1
)
)

如果没有其他东西的话,解析的代码就少了一点。你怎么计算时间呢?很有意思的是知道……我猜你可以增加$a,而不是把$a改成一个新的变量,如果有人感兴趣的话,这个变量只比基准值大3位。它的速度更快=>未优化,转换器不会分析左一个操作数是目标操作数,而是意味着如果
$a+=3
$a=$a+3
快,
$a=$a+3
可能比
$a=$a+$a
快,我不确定调用了3次。
$a=$a+3
将$a复制到临时内存空间,将3添加到临时内存空间中的值,用临时内存空间中的值覆盖$a的值;
$a+=3
:在$a的值上添加3-无需将$a复制到tempspace;无需将tempspace值写入$a
<?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
        )

)