Re: Assign by reference...

From: Date: Tue, 13 Jun 2000 02:40:33 +0000
Subject: Re: Assign by reference...
References: 1  Groups: php.general 
Request: Send a blank email to php-general+get-1681@lists.php.net to get a copy of this message
On Mon, 12 Jun 2000, Benjamin Berman wrote: > I'm having a problem with the new assign by reference feature in PHP4. > Consider the following code; it's an artificial example that takes an > array of numbers, for instance (1,2,3) and transforms it into an array > of arrays, where each array contains multiples of the original number, > for instance ((1,10,100), (2,20,200), (3, 30, 300)). Here is the code: > > > 1 $num_arr = array(1, 2, 3); > 2 $multiples_arr = array(); > 3 while (list($key, $val) = each($num_arr)) > 4 { > 5 $mult_arr = array($val, $val*10, $val*100); > 6 $multiples_arr[] = &$mult_arr; > 7 } > 8 > 9 while (list($key, $mult_arr) = each($multiples_arr)) > 10 { > 11 print join(",",$mult_arr)."<BR>\n"; > 12 } > > > I would expect to get the output: > > 1,10,100 > 2,20,200 > 3,30,300 > > But instead, I get the following: > > 3,30,300 > 3,30,300 > 3,30,300 > > > This is counter-intuitive with respect to other programming languages > I've used. I can guess what's happening underneath to make PHP display > this behavior, but it still seems to contradict my notion of what > "assignment by reference" means. Is there any way to get PHP to do what > I want it to do here? I don't understand why you think this is counter-intuitive. To simplify it way down, you are basically doing: $a=1; $b[]=&$a; $a=2; $b[]=&$a; and you expect the $b array to contain 1,2 But since all you are doing is putting a pointer to $a into the $b array twice, then you cannot possibly have different values in each slot. That is the whole point of references. There is only 1 copy of $a here. -Rasmus

« previous php.general (#1681) next »