PHP 4.0 Bug #7454 Updated: $this in constructor is different than instaniated object

From: Date: Wed, 06 Dec 2000 21:47:51 +0000
Subject: PHP 4.0 Bug #7454 Updated: $this in constructor is different than instaniated object
Groups: php.dev 
Request: Send a blank email to php-dev+get-40260@lists.php.net to get a copy of this message
ID: 7454 Updated by: waldschrott Reported By: heathmike@hotmail.com Status: Closed Bug Type: Class/Object related Assigned To: Comments: fixed in latest CVS, but you'll have to use $bar1 = &new foo('constructor1'); $bar2 = &new foo('constructor2'); $bar3 = &new foo('constructor3'); in these cases instead, please check it out Previous Comments: --------------------------------------------------------------------------- [2000-11-27 14:53:49] waldschrott@php.net simplified and extended testcase <?php class foo { function foo($name) { $GLOBALS['List']= &$this; $this->Name = $name; $GLOBALS['List']->echoName(); } function echoName() { echo "<br>".$this->Name; } } function &foo2(&$foo) { return $foo; } $bar1 = new foo('constructor1'); //$bar1 = foo2(new foo('constructor1')); $bar1->Name = 'outside1'; $bar1->echoName(); $List->echoName(); echo '<P>'; ?> --------------------------------------------------------------------------- [2000-11-27 07:17:16] sniper@php.net reclassify --------------------------------------------------------------------------- [2000-10-25 12:59:48] heathmike@hotmail.com Trying to store a reference to $this from inside the constructor does not store the same reference that new class() returns. The following example shows that. <?php class foo { var $Name; function foo($name) { Global $List; $List[] = &$this; $this->Name = $name; } function echoName() { echo "<br>".$this->Name; } } $bar1 = new foo('constructor1'); $bar2 = new foo('constructor2'); $bar3 = new foo('constructor3'); $bar1->Name = 'outside1'; $bar2->Name = 'outside2'; $bar3->Name = 'outside3'; // $bar1..3 have been changed as shown below $bar1->echoName(); $bar2->echoName(); $bar3->echoName(); // $list however contains a copy becuase it's values have not been changed while (list($key, $val) = each($List)) { $val->echoName(); } ?> Either a copy is being made when it shouldn't be or I'm doing something wrong. If I'm doing something wrong I think this should be documented. Mike Heath --------------------------------------------------------------------------- Full Bug description available at: http://bugs.php.net/?id=7454

« previous php.dev (#40260) next »