note 82955 added to language.references.unset
| From: | ojars26 at NOSPAM dot inbox dot lv | Date: | Sat, 03 May 2008 14:41:22 +0000 |
| Subject: | note 82955 added to language.references.unset | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-139022@lists.php.net to get a copy of this message | ||
Simple look how PHP Reference works
<?php
/* Imagine this is memory map
______________________________
|pointer | value | variable |
-----------------------------------
| 1 | NULL | --- |
| 2 | NULL | --- |
| 3 | NULL | --- |
| 4 | NULL | --- |
| 5 | NULL | --- |
------------------------------------
Create some variables */
$a=10;
$b=20;
$c=array ('one'=>array (1, 2, 3));
/* Look at memory
_______________________________
|pointer | value | variable's |
-----------------------------------
| 1 | 10 | $a |
| 2 | 20 | $b |
| 3 | 1 | $c['one'][0] |
| 4 | 2 | $c['one'][1] |
| 5 | 3 | $c['one'][2] |
------------------------------------
do */
$a=&$c['one'][2];
/* Look at memory
_______________________________
|pointer | value | variable's |
-----------------------------------
| 1 | NULL | --- | //value of $a is destroyed and pointer is free
| 2 | 20 | $b |
| 3 | 1 | $c['one'][0] |
| 4 | 2 | $c['one'][1] |
| 5 | 3 | $c['one'][2] ,$a | // $a is now here
------------------------------------
do */
$b=&$a; // or $b=&$c['one'][2]; result is same as both
"$c['one'][2]" and "$a" is at same pointer.
/* Look at memory
_________________________________
|pointer | value | variable's |
--------------------------------------
| 1 | NULL | --- |
| 2 | NULL | --- | //value of $b is destroyed and pointer is free
| 3 | 1 | $c['one'][0] |
| 4 | 2 | $c['one'][1] |
| 5 | 3 |$c['one'][2] ,$a , $b | // $b is now here
---------------------------------------
next do */
unset($c['one'][2]);
/* Look at memory
_________________________________
|pointer | value | variable's |
--------------------------------------
| 1 | NULL | --- |
| 2 | NULL | --- |
| 3 | 1 | $c['one'][0] |
| 4 | 2 | $c['one'][1] |
| 5 | 3 | $a , $b | // $c['one'][2] is destroyed not in
memory, not in array
---------------------------------------
next do */
$c['one'][2]=500; //now it is in array
/* Look at memory
_________________________________
|pointer | value | variable's |
--------------------------------------
| 1 | 500 | $c['one'][2] | //created it lands on any(next) free
pointer in memory
| 2 | NULL | --- |
| 3 | 1 | $c['one'][0] |
| 4 | 2 | $c['one'][1] |
| 5 | 3 | $a , $b | //this pointer is in use
---------------------------------------
lets tray to return $c['one'][2] at old pointer an remove reference $a,$b. */
$c['one'][2]=&$a;
unset($a);
unset($b);
/* look at memory
_________________________________
|pointer | value | variable's |
--------------------------------------
| 1 | NULL | --- |
| 2 | NULL | --- |
| 3 | 1 | $c['one'][0] |
| 4 | 2 | $c['one'][1] |
| 5 | 3 | $c['one'][2] | //$c['one'][2] is returned,
$a,$b is destroyed
--------------------------------------- ?>
I hope this helps.
----
Server IP: 69.147.83.197
Probable Submitter: 86.156.250.52
----
Manual Page -- http://www.php.net/manual/en/language.references.unset.php
Edit -- https://master.php.net/note/edit/82955
Del: integrated -- https://master.php.net/note/delete/82955/integrated
Del: useless -- https://master.php.net/note/delete/82955/useless
Del: bad code -- https://master.php.net/note/delete/82955/bad+code
Del: spam -- https://master.php.net/note/delete/82955/spam
Del: non-english -- https://master.php.net/note/delete/82955/non-english
Del: in docs -- https://master.php.net/note/delete/82955/in+docs
Del: other reasons-- https://master.php.net/note/delete/82955
Reject -- https://master.php.net/note/reject/82955
Search -- https://master.php.net/manage/user-notes.php