On Mon, Oct 04, 2004 at 09:39:16AM -0500, Bob Glamm wrote: > I saw this behavior this morning and was curious if I'd tripped a bug > in PHP (running version 4.3.7 at the moment). I scanned through the > bug list for this particular bug but didn't find it. I'm running it > by you all because I'm not intimately familiar with the reference > system to really be sure that it's a bug and not just my misunderstanding. > > A demonstration script is included below: > globals $x and $v are set to NULL. q() is called > and references globals $x and $v. $x is set to the new class X; > $v is set to a reference to a new class Y (by means of a factory > function in X, a common structure in PEAR). > > My version of PHP prints NULL at the var_dump() statement immediately > following the call to q(); I would expect it to dump an instance of > class Y. So: am I misunderstanding references (and if so, why is the > behavior what it is), is this a duplicate > of another known bug, is this bug fixed in a newer version of PHP, > or should I file a new bug? > > -Bob > > <?php > > class Y // class created by factory in X, below > { > function Y($t) { $this->a = $t; } > } > > class X > { > function X() { } > > function &getY($t) // factory method to create Y and return a ref to it > { > $k = new Y($t); > return($k); > } > } > > $x = null; > $v = null; > > function q() > { > global $x, $v;
this makes a reference just like $v =& $GLOBALS['v']; would > $x = new X(); // get an X simply to acquire a Y > $v =& $x->getY("here"); // use the factory in X to assign a ref > // to Y to the global $v this overrides the old reference (the one to $GLOBALS['v']) with a new (local) one. this behaviour may look odd, but it is not a bug. do "$GLOBALS['v'] =& $x->getY("here")" instead and $v will be assinged as expected. > } > > q(); // initialize the globals with X and &Y > var_dump($v); // should dump a Y, instead prints NULL ? > > ?> > > -- > PHP Internals - PHP Runtime Development Mailing List > To unsubscribe, visit: http://www.php.net/unsub.php -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php