Tom Worster wrote:
> On 7/22/09 6:09 PM, "Shawn McKenzie" <nos...@mckenzies.net> wrote:
> 
>> Tom Worster wrote:
>>> though the manual is perfectly clear that this should be expected, i was a
>>> bit surprised that the result of the following is 42
>>>
>>> <?php
>>> function foo(&$a) {
>>>   $a = 42;
>>>   unset($a);
>>>   $a = 'meaning';
>>> }
>>> foo($a);
>>> print("$a\n");
>>> ?>
>>>
>>> normally i would expect unset() to free some memory. but in this example it
>>> doesn't and has a different behavior: it releases foo's reference to the
>>> global $a, allowing the next line to define a local $a.
>>>
>>> i think i'd have preferred compile error.
>>>
>>>
>> Well, you unset the reference and then you assigned 'meaning' to a local
>> function variable $a.  Why would you get a compile error?
> 
> when you state it in those terms (which are clearly correct) i wouldn't.
> 
> but if the way i think is "unset() destroys the specified variables" (as the
> manual puts it) then i expect that the specified variable would be
> destroyed, not the reference.
> 
> so, as i said, i was a bit surprised when the variable wasn't destroyed.
> once i understood what was happening, i thought it a bit confusing to have
> such scope-dependent differences in behavior of a language element.
> 
> 
It might be easier to understand if you don't use the same var names:

function foo(&$arg) {
  $arg = 42;
  unset($arg);
  $arg = 'meaning';
}

$a = 0;
foo($a);
print("$a\n");


-- 
Thanks!
-Shawn
http://www.spidean.com

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to