Hi,
I was wondering if any of you could help me out with a problem concerning
object references. At first, I thought that it would be a bug
(http://bugs.php.net/bug.php?id=26756) but the developers told me that it is not. So
here is a
short description:
If you have two object that reference each other, one of the references
seems to get lost. Instead I get a copy of the object. If you consider the
following source code:
--------------------
class Test1 {
var $a;
function Test1() {
$this->a = new Test2();
}
function &getTest2() {
return $this->a;
}
}
class Test2 {
var $b;
var $counter = 1;
function Test2() {
$this->b = new Test3($this);
}
function &getTest3() {
return $this->b;
}
}
class Test3 {
var $p;
function Test3(&$parent) {
$parent->counter++;
$this->p =& $parent;
}
function getCounter() {
return $this->p->counter;
}
}
$obj = new Test1();
$obj2 =& $obj->getTest2();
echo $obj2->counter; // *1*
$obj2->counter++; // *2*
$obj3 =& $obj2->getTest3();
echo $obj3->getCounter(); // *4*
var_dump($obj);
--------------------
Line *1* should echo "2" after the constructor of Test2 increased the
counter. Line *2* should increase it to "3", so line *4* should echo "3". But if
you consider the result, you actually get the following:
--------------------
22
object(test1)(1) {
["a"]=>
&object(test2)(2) {
["b"]=>
&object(test3)(1) {
["p"]=>
&object(test2)(2) {
["b"]=>
object(test3)(1) {
["p"]=>
&object(test2)(2) {
["b"]=>
object(test3)(1) {
["p"]=>
*RECURSION*
}
["counter"]=>
int(2)
}
}
["counter"]=>
int(2)
}
}
["counter"]=>
int(3)
}
}
--------------------
Note especially the missing ampersands, although I only used references.
I hope someone can help me as I really depend on objects referencing each
other.
Tilman Giese
--
+++ GMX - die erste Adresse f�r Mail, Message, More +++
Neu: Preissenkung f�r MMS und FreeMMS! http://www.gmx.net
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php