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