Reference is killed by unset but not by other =&
| Request #33282 | Reference is killed by unset but not by other =& | ||||
|---|---|---|---|---|---|
| Submitted: | 2005-06-09 15:33 UTC | Modified: | 2006-11-07 20:24 UTC | ||
| From: | devik at cdi dot cz | Assigned: | dmitry (profile) | ||
| Status: | Closed | Package: | Feature/Change Request | ||
| PHP Version: | 5CVS-2005-06-13 | OS: | Linux | ||
| Private report: | No | CVE-ID: | None | ||
[2005-06-09 15:33 UTC] devik at cdi dot cz
Description: ------------ This is variation on #15025. But I accept the bug is feature and I show other bug it triggers. Basic problem is that when you take ref of array item then the item will turn into reference (which will survive even array copy). I don't see it as too big problem as long as I can get rid of the reference. "unset" does the trick as expected: $r =& $A[0]; unset($r); - $A[0] is not reference any more But something like: $r =& $othervar; doesn't kill reference - you see zval with is_ref=1 and refcount=1. It prevents you from writing handy code: $c = &$c[$i] when traversing complex structures. Reproduce code: --------------- <? $a = array(1,2); $b =& $a[0]; echo "Now a[0] is reference, no problem\n"; debug_zval_dump($a); $b =& $a[1]; echo "Now a[0] has no reason to be reference any longer, but a[1] is\n"; debug_zval_dump($a); unset($b); echo "Now a[1] reference is gone too BUT WAIT, a[0] is still a ref !\n"; debug_zval_dump($a); ?> Expected result: ---------------- I expect $a without references. Actual result: -------------- $a[0] is reference with refcount(1).
Patches
Pull Requests
History
AllCommentsChangesGit/SVN commits
[2005-09-02 08:33 UTC] devik at cdi dot cz
[2006-11-07 20:24 UTC] iliaa@php.net