首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么$a += 3的执行速度比$a = $a +3快?

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

Stack Overflow用户
提问于 2013-07-05 16:18:41
回答 3查看 167关注 0票数 7

PHP手册指出:

将3添加到$a的当前值可以写入“$a += 3”。这意味着“获取$a的值,将其添加到3中,并将其重新分配到$a中”。不仅更短、更清晰,而且执行速度也更快。

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

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

EN

回答 3

Stack Overflow用户

发布于 2013-07-05 16:22:02

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

票数 4
EN

Stack Overflow用户

发布于 2013-07-05 17:21:37

PHP是一个解释器,因此,为了使好的代码具有良好的性能,它必须将自己限制为不要做“有效”的复杂操作(编译器可以这样做,因为它们有时间)。

从时间上看,拥有=+比它的等价和更好,因为它使用的资源更少。

在PHP的例子中,它将=+标记为T_PLUS_EQUAL,这也是最好通过PHP可执行文件执行的,另一方面,sum,嗯,它被标记(并执行),就像sum一样。

跟随两个token_get_all()的“转储”

代码语言:javascript
复制
<?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
        )

)
票数 3
EN

Stack Overflow用户

发布于 2013-07-05 16:23:01

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

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17493164

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档