variable behaviour

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