----- Original Message ----- From: "John" <[EMAIL PROTECTED]> To: <[EMAIL PROTECTED]> Sent: Friday, March 16, 2001 9:12 PM Subject: Re: [PHP] Strange PHP Reference behaviour with globals > Thanks Yasuo, > > That might explain why $gGlobal is not permanently set to 99, > but that doesn't explain why $gGlobal is set to 55 in ChangeGlobalValue() > permanently. So are you or am I missing something? Reference in PHP is not actually a pointer. It's a common pithole for C/C++ programmers. In C/C++, you will get 99, instead of 55. But we get 55 in PHP. Here is why. Reference is just a place holder for a value. Your code creates referece with "global" statement asI wrote in previous mail. global $var; creates reference to $GLOBAL['var'] for local $var IN function scope. $var is actually a reference, NOT a variable itself nor a pointer. > > > function ChangeGlobalRef() > > > { > > > global $gGlobal; Creating reference here, for $GLOBAL['gGlobal']. > > > > > > $local = 99; > > > $gGlobal = &$local; You assign reference of "$local" to "$gGlobal" which is also a reference. $gGlobal = &$local; This replaces $gGlobal(reference) with $local(reference). Your code does not change $GLOBAL['gGlobal'], which is the value you want to change. > > > print "Ref:Global=$gGlobal<BR>"; > > > } Since your code replace reference with reference inside function scope. You get $gGlobal = 99 inside the function, but not outside the function. (Note: Your $gGlobal is refered to $local that has 99 in the function) Because $gGlobal itself is local to the function. Therefore, you cannot get 99 outside the function, but 55. I hope I explained well, so that all readers understand what I'm talking about. Regards, -- Yasuo Ohgaki > Bye, John > > ""Yasuo Ohgaki"" <[EMAIL PROTECTED]> wrote in message > [EMAIL PROTECTED]">news:[EMAIL PROTECTED]... > > This is expected behavior of PHP's reference. Reference works like a > pointer, > > but it dose NOT works like a pointer. This is case that reference does > not > > works as many programmer expected. > > > > I think this is in manual. > > > > Hint: when programmer use 'global $var'. It is the same as do '$var = & > > $GLOBALS['var']'. > > > > Regards, > > > > Yasuo Ohgaki > > ========================= > > My favorite links > > [RFC] http://www.faqs.org/rfcs/ [W3C] http://www.w3.org/ > > [PHP Manual] http://www.php.net/manual/en/ > > > > > Hello, > > > > > > Try the following code: > > > > > > <?php > > > > > > $gGlobal = 1; > > > function ChangeGlobalValue() > > > { > > > global $gGlobal; > > > > > > $local = 55; > > > $gGlobal = $local; > > > print "Value:Global=$gGlobal<BR>"; > > > } > > > > > > function ChangeGlobalRef() > > > { > > > global $gGlobal; > > > > > > $local = 99; > > > $gGlobal = &$local; > > > print "Ref:Global=$gGlobal<BR>"; > > > } > > > > > > print "Global=$gGlobal<BR>"; > > > ChangeGlobalValue(); > > > print "Global=$gGlobal<BR>"; > > > ChangeGlobalRef(); > > > print "Global=$gGlobal<BR>"; > > > ?> > > > > > > I get the following results: > > > > > > Global=1 > > > Value:Global=55 > > > Global=55 > > > Ref:Global=99 > > > Global=55 <=========== shouldn't this be 99 ??? > > > > > > Why does setting a global variable to a reference fail in a function? > > > > > > Tested on PHP 4.0.4 on IIS5 (CGI version). > > > > > > > > > > > > > > > -- > > > PHP General Mailing List (http://www.php.net/) > > > To unsubscribe, e-mail: [EMAIL PROTECTED] > > > For additional commands, e-mail: [EMAIL PROTECTED] > > > To contact the list administrators, e-mail: [EMAIL PROTECTED] > > > > > > > > > > -- > > PHP General Mailing List (http://www.php.net/) > > To unsubscribe, e-mail: [EMAIL PROTECTED] > > For additional commands, e-mail: [EMAIL PROTECTED] > > To contact the list administrators, e-mail: [EMAIL PROTECTED] > > > > > > -- > PHP General Mailing List (http://www.php.net/) > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > To contact the list administrators, e-mail: [EMAIL PROTECTED] > > -- PHP General Mailing List (http://www.php.net/) To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] To contact the list administrators, e-mail: [EMAIL PROTECTED]

Reply via email to