From:             [EMAIL PROTECTED]
Operating system: Win2k
PHP version:      4.0.4pl1
PHP Bug Type:     *General Issues
Bug description:  $this can't be passed by reference inside of constructor

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.


-- 
Edit Bug report at: http://bugs.php.net/?id=8740&edit=1



-- 
PHP Development Mailing List <http://www.php.net/>
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