You are here: RE: [PHP] gloabl & reference behavior question? « PHP « IT news, forums, messages
RE: [PHP] gloabl & reference behavior question?

Posted by "Ford, Mike" on 07/21/05 14:08

On 20 July 2005 23:40, Surendra Singhi wrote:

> Hello,
>
> (1)
> When I try this code:
> <?php
>
> $var_global =" stuff";
> function f1() {
> global $var_global;

This is equivalent to creating a $var_global which is local to the function,
and making it be a reference to the global $var_global -- effectively:

$var_global = &$GLOBALS['var_global'];


> $var_local = array(1,2);
> $var_global =& $var_local;

But this assigns a new reference to $var_local to the (local) $var_global,
thus breaking the reference to the (global) $var_global -- so the (global)
$var_global isn't changed by this assignment.

> }

Thus, when the function returns, the (local) $var_global disappears, and the
(global) $var_global comes back into scope with its value unchanged.

> f1();
> print_r($var_global);
> >
> I get the output:
>
> stuff
>
> where as I was expecting junk value or null.
>
>
> My question is that, because the array is created locally and we
> pass it by reference (without copying) so on the exit of
> function, its value
> is lost, but how does the global variable gets back its old value?

See description above.

> Is it something which is not defined by the PHP language
> reference and is
> implementation specific?

No this is described in the manual at
http://php.net/global#language.variables.scope.references

To do what you're trying to do, you should make use of the $GLOBALS
superglobal:

$GLOBALS['var_global'] = &$var_local;

But that seems very dodgy -- and, since $var_local disappears when the
function returns anyway, why not just:

$GLOBALS['var_global'] = array(1,2);

Overall, I'd be somewhat suspicious about what your function is trying to
do, as the whole approach seems rather convoluted to me.

Cheers!

Mike

---------------------------------------------------------------------
Mike Ford, Electronic Information Services Adviser,
Learning Support Services, Learning & Information Services,
JG125, James Graham Building, Leeds Metropolitan University,
Headingley Campus, LEEDS, LS6 3QS, United Kingdom
Email: m.ford@leedsmet.ac.uk
Tel: +44 113 283 2600 extn 4730 Fax: +44 113 283 3211


To view the terms under which this email is distributed, please go to http://disclaimer.leedsmet.ac.uk/email.htm

 

Navigation:

[Reply to this message]


Удаленная работа для программистов  •  Как заработать на Google AdSense  •  England, UK  •  статьи на английском  •  PHP MySQL CMS Apache Oscommerce  •  Online Business Knowledge Base  •  DVD MP3 AVI MP4 players codecs conversion help
Home  •  Search  •  Site Map  •  Set as Homepage  •  Add to Favourites

Copyright © 2005-2006 Powered by Custom PHP Programming

Сайт изготовлен в Студии Валентина Петручека
изготовление и поддержка веб-сайтов, разработка программного обеспечения, поисковая оптимизация