|
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]
|