FWIW, after a bit more investigating, changing the call in q() to the
factory method getY() from:
$v =& $x->getY("here");
to
$GLOBALS['v'] =& $x->getY("here");
the var_dump($v) in the global section of code works as expected.
-Bob
> 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;
>
> $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
> }
>
> 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