variable behaviour

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • stef

    variable behaviour

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


  • Rik Wasmus

    #2
    Re: variable behaviour

    On Sat, 19 Apr 2008 12:12:44 +0200, stef <stef.pellegrin o@gmail.comwrot e:
    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...
    Well $var2 is an entirely new value, but untill $var1 or $var2 is changed,
    the value isn't copied / doubled as a means of internal PHP optimasation..
    $var3=& $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 available
    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 are
    'delayed copies, only copied when needed'.

    It's an internal PHP thing you shouldn't worry to much about. Possibly it
    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

    Comment

    Working...