note 82955 added to language.references.unset

From: 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

« previous php.notes (#139022) next »