|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2000-10-25 12:59 UTC] heathmike at hotmail dot 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
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Wed Oct 22 17:00:01 2025 UTC |
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>'; ?>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