variable behaviour
am 19.04.2008 12:12:44 von stef.pellegrino
Hello,
Could you tell me why a zval cannot be both reference AND value ??
This behaviour leads to this amazing thing :
$var1='Hello';
$var2=$var1; <-- var2 is a "pointer" to var1, sounds normal...
$var3=& $var2 ;
wow... Now $var2 has its own zval memory, It doesn't point anymore to
$var1 !??
I guess, the flag "is_ref" is involved, but I'm not sure...
Anyway, sounds complicated (I mean internally) for a "simple"
assignment.
Thanks...
Re: variable behaviour
am 19.04.2008 14:16:17 von luiheidsgoeroe
On Sat, 19 Apr 2008 12:12:44 +0200, stef wro=
te:
> Could you tell me why a zval cannot be both reference AND value ??
>
> This behaviour leads to this amazing thing :
>
> $var1=3D'Hello';
> $var2=3D$var1; <-- var2 is a "pointer" to var1, sounds normal...
Well $var2 is an entirely new value, but untill $var1 or $var2 is change=
d, =
the value isn't copied / doubled as a means of internal PHP optimasation=
..
> $var3=3D& $var2 ;
>
> wow... Now $var2 has its own zval memory, It doesn't point anymore to
> $var1 !??
Yes, $var2 is altered in some way. $var3 is a reference to $var2 but NOT=
=
$var1, alterations on $var1 should not effect $var3. In other words: =
there's some data in memory available to by $var1. and some data availab=
le =
to $var2 & $var3. It was probably to difficult (or not worth the trouble=
) =
to keep track of variable names referencing one another and which ones a=
re =
'delayed copies, only copied when needed'.
It's an internal PHP thing you shouldn't worry to much about. Possibly i=
t =
could be optimised to only really duplicate the original value of $var1 =
to =
$var2 on a change in data, even something references the second one. The=
=
source is freely available, have fun :)
-- =
Rik Wasmus