ID: 8740
User Update by: [EMAIL PROTECTED]
Status: Closed
Bug Type: *General Issues
Description: $this can't be passed by reference inside of constructor

works, but still a bit clumsy.

thanks for the help.

Previous Comments:

[2001-01-16 17:53:15] [EMAIL PROTECTED]
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

and you'll see that it works

this is due to the fact NEW returns a copy be default


[2001-01-16 15:26:12] [EMAIL PROTECTED]
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] [EMAIL PROTECTED]
try this:

$foo =& new foobar();


[2001-01-16 12:55:26] [EMAIL PROTECTED]
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] [EMAIL PROTECTED]
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->bla = 11;

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.


The remainder of the comments for this report are too long.  To view the rest of the 
comments, please view the bug report online.

Full Bug description available at:

PHP Development Mailing List <>
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]

Reply via email to