PHP 4.0 Bug #8937 Updated: unset() in context with GLOBAL

From: Date: Thu, 08 Mar 2001 17:27:52 +0000
Subject: PHP 4.0 Bug #8937 Updated: unset() in context with GLOBAL
Groups: php.dev 
Request: Send a blank email to php-dev+get-48289@lists.php.net to get a copy of this message
ID: 8937 Updated by: stas Reported By: aulbach@unter.franken.de Old-Status: Open Status: Closed Bug Type: Scripting Engine problem Assigned To: Comments: "the program dosn't do, what I expect" is not a bug. A bug is "the program doesn't do what the programmer expected". If 'man' program doesn't create a little man to help you with your C code, it's not the program's fault :) And no, it cannot work the way you proposed, because there's no way to discover what that "other" variable, that $foo is linked to, was in the first place. It's located in another symbol table, which is not available in that function. But if you don't really need unset (which wipes the variable completely), you could just use something like $foo=false, which does work on references perfectly. Previous Comments: --------------------------------------------------------------------------- [2001-03-08 11:23:24] aulbach@unter.franken.de My problem is, that old PHP3 scripts won´t work with PHP4, if they use such a construct. And it is a bug in the meaning of "the program dosn't do, what I expect". Ok, the bug is documented, but look at the ERROR-ID #8972 for a case, that makes a much more surprising and unexpected effect. Why can't PHP just overwrite the value with the value "UNSET" in the case of unsetting a reference - instead of removing the reference? --------------------------------------------------------------------------- [2001-03-06 08:10:47] stas@php.net So, what's the problem with your latest code? I do not see any. --------------------------------------------------------------------------- [2001-01-28 18:53:34] aulbach@unter.franken.de Bug or feature. Thats the question. :) Sorry, it IS a bug. 4 people have mentioned this and I found now a test case, where no workarround exists. But I found another problem in this context. Will make a new ticket. --------------------------------------------------------------------------- [2001-01-26 16:24:50] derick@php.net Sorry... forgot to read all the comments.... --------------------------------------------------------------------------- [2001-01-26 16:14:57] derick@php.net This isn't a bug, but a feature =) If you use GLOBAL within a function it creates a reference to the orignal variabele, this reference is local to the function. SO if you unset() this variabele, you're only unsetting the reference (and thus not the GLOBAL variabele). This is documented behavior (from the unset() manual page): If a globalized variable is unset() inside of a function, only the local variable is destroyed. The variable in the calling environment will retain the same value as before unset() was called. --------------------------------------------------------------------------- The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online. ATTENTION! Do NOT reply to this email! To reply, use the web interface found at http://bugs.php.net/?id=8937&edit=2

« previous php.dev (#48289) next »