Re: Re: unsetting a referenced parameter in a function
| From: | Tom Worster | Date: | Thu, 23 Jul 2009 00:27:26 +0000 |
| Subject: | Re: Re: unsetting a referenced parameter in a function | ||
| References: | 1 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-295723@lists.php.net to get a copy of this message | ||
On 7/22/09 6:09 PM, "Shawn McKenzie" <nospam@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.