Hi, internals,

I have a question about Assign By Reference and I posted on StackOverflow,
I'd like to know the reason behind it, and I did not get any this kind of
answer, can anyone give me some clues.

---

We have a piece of simple code:

1    <?php
2    $i = 2;
3    $j = &$i;
4    echo (++$i) + (++$i);
On PHP5, it outputs 8, because:

$i is a reference, when we increase $i by ++i, it will change the zval
rather than make a copy, so line 4 will be 4 + 4 = 8. This is Assign By
Reference.

If we comment line 3, it will output 7, every time we change the value by
increasing it, PHP will make a copy, line 4 will be 3 + 4 = 7. This is Copy
On Write.

But in PHP7, it always outputs 7.

I've checked the changes in PHP7:
http://php.net/manual/en/migration70.incompatible.php, but I did not get
any clue.

Here is the result of the code on PHP5 / PHP7: https://3v4l.org/USTHR

And there is the link on Stackoverflow:
http://stackoverflow.com/questions/36338661/php-copy-on-write-and-assign-by-reference-perform-different-on-php5-and-php7

Thanks guys.


Best,


-- 

Huqiu Liao
http://www.liaohuqiu.net

Reply via email to