PHP 4.0 Bug #8740 Updated: $this can't be passed by reference inside of constructor

From: Date: Tue, 16 Jan 2001 22:53:15 +0000
Subject: PHP 4.0 Bug #8740 Updated: $this can't be passed by reference inside of constructor
Groups: php.dev 
Request: Send a blank email to php-dev+get-44285@lists.php.net to get a copy of this message
ID: 8740 Updated by: waldschrott Reported By: florian.ortner@nme.at Old-Status: Open Status: Closed Bug Type: *General Issues Assigned To: Comments: you did not quite understand: 1) add a &, like below it should read, on the global scope: $a = &new a(10); 2) remove that xtra line $a->x(); and you'll see that it works this is due to the fact NEW returns a copy be default Previous Comments: --------------------------------------------------------------------------- [2001-01-16 15:26:12] florian.ortner@nme.at no, that's the opposite of what i wanna get. $this->b = new b($this); is instancing and assigning a new object of type b to $this->b BUT not passing $this by reference to b's constructor. $foo =& new foobar(); ofcourse doesn't change this behaviour. --------------------------------------------------------------------------- [2001-01-16 13:15:12] waldschrott@php.net try this: $foo =& new foobar(); --------------------------------------------------------------------------- [2001-01-16 12:55:26] florian.ortner@nme.at just in case, if i change a's constructor to function a($i) { $this->bla = $i; $this->b = new b(&$this); // note the & } it doesn't work either. --------------------------------------------------------------------------- [2001-01-16 12:51:24] florian.ortner@nme.at the following code-snippet illustrated the problem: ----- class a { var $bla; // some intvalue var $b; // object of type b function a($i) { $this->bla = $i; // the next line ain't working in the constructor //$this->b = new b($this); } function x() { // the next line behaves like expected $this->b = new b($this); } function p() { echo "a::p ".$this->bla."<br>"; } } class b { var $a; // reference to object of type a function b(&$a) { $this->a = &$a; } function p() { echo "b::p ".$this->a->bla."<br>"; } } $a = new a(10); $a->x(); // works $a->p(); $a->b->p(); $a->bla = 11; $a->p(); $a->b->p(); ----- output: a::p 10 b::p 10 a::p 11 b::p 11 ----- this is the wanted behaviour. var $a->b contains a object of type b which contains a reference back to object $a. object b is instanciated and assigned via the $a->x() methodcall. so far, nothing special. when i want to get rid of the additional method in a (that's the x() method) and instanciate b inside of a's constructor and assign it to $a->b with $this, $a->b->a doesnt contain a reference to the calling a object but a copy of it. thus, $this isn't really working inside of an object's constructor. afaik do other languages have the same limitation of using $this inside of the constructor due to address-calculation issues. --------------------------------------------------------------------------- Full Bug description available at: http://bugs.php.net/?id=8740

« previous php.dev (#44285) next »