Php 为什么$a+;=3执行速度超过$a=$a+;3.
声明: 将3添加到$a的当前值可以写入“$a+=3”。这 意思是“取$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虚拟机中使用临时变量。 而
$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
)
)