Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:13139 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 54424 invoked by uid 1010); 4 Oct 2004 14:49:12 -0000 Delivered-To: ezmlm-scan-internals@lists.php.net Delivered-To: ezmlm-internals@lists.php.net Received: (qmail 54298 invoked from network); 4 Oct 2004 14:49:11 -0000 Received: from unknown (HELO mail.a-s-i.com) (208.42.143.194) by pb1.pair.com with SMTP; 4 Oct 2004 14:49:11 -0000 Received: from romulus.a-s-i.com (localhost [127.0.0.1]) by mail.a-s-i.com (8.12.11/8.12.11) with ESMTP id i94EnBEJ020337 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO) for ; Mon, 4 Oct 2004 09:49:11 -0500 Received: (from glamm@localhost) by romulus.a-s-i.com (8.12.11/8.12.11/Submit) id i94EnBEY020336 for internals@lists.php.net; Mon, 4 Oct 2004 09:49:11 -0500 X-Authentication-Warning: romulus.a-s-i.com: glamm set sender to glamm@a-s-i.com using -f Date: Mon, 4 Oct 2004 09:49:11 -0500 To: internals@lists.php.net Message-ID: <20041004144911.GA20248@romulus.a-s-i.com> Mail-Followup-To: Bob Glamm , internals@lists.php.net References: <20041004143916.GA19506@romulus.a-s-i.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20041004143916.GA19506@romulus.a-s-i.com> User-Agent: Mutt/1.4.1i Subject: Re: [PHP-DEV] Odd reference => global bug (followup)? From: glamm@a-s-i.com (Bob Glamm) 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 > > > 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