PHP:在写入时复制和按引用分配在PHP5和PHP7上执行不同的操作

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了PHP:在写入时复制和按引用分配在PHP5和PHP7上执行不同的操作脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
我们有一段简单代码
1    <?PHP
2    $i = 2;
3    $j = &amp;$i;
4    echo (++$i) + (++$i);

PHP5上,它输出8,因为:

$i是一个引用,当我们通过i增加$i时,它将改变zval而不是复制,因此第4行将是4 4 = 8.这是按引用分配.

如果我们评论第3行,它将输出7,每次我们通过增加它来改变它,PHP将复制,第4行将是3 4 = 7.这是Copy On WrITe.

但在PHP7中,它总是输出7.

我已经检查了PHP7:http://php.net/manual/en/migration70.incompatible.php中的更改,但我没有得到任何线索.

任何帮助都会很棒,提前谢谢.

UPDATE1

以下是PHP5 / PHP7:https://3v4l.org/USTHR代码的结果

UPDATE2

操作码:

[huqiu@101 tmp]$PHP -d vld.active=1 -d vld.execute=0 -f incr-ref-add.PHP
Finding entry points
branch analysis From position: 0
Jump found. Position 1 = -2
filename:       /home/huqiu/tmp/incr-ref-add.PHP
function name:  (null)
number of ops:  7
compiled VARs:  !0 = $i,!1 = $j
line     #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   2     0  E >   ASSIGN                                                   !0,2
   3     1        ASSIGN_REF                                               !1,!0
   4     2        PRE_INC                                          $2      !0
         3        PRE_INC                                          $3      !0
         4        ADD                                              ~4      $2,$3
         5        ECHO                                                     ~4
   5     6      > RETURN                                                   1

branch: #  0; line:     2-    5; sop:     0; eop:     6; out1:  -2
path #1: 0,
免责声明:我不是PHP Internals专家(但是?)所以这完全取决于我的理解,并不保证100%正确或完整.
本图文内容来网友网络收集整理提供,作为学习参考使用,版权属于原作者。

脚本宝典总结

以上是脚本宝典为你收集整理的PHP:在写入时复制和按引用分配在PHP5和PHP7上执行不同的操作全部内容,希望文章能够帮你解决PHP:在写入时复制和按引用分配在PHP5和PHP7上执行不同的操作所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。