Re: Recursive classes ... possible bug?

From: Date: Tue, 05 Jun 2007 22:20:47 +0000
Subject: Re: Recursive classes ... possible bug?
References: 1 2  Groups: php.internals 
Request: Send a blank email to internals+get-30098@lists.php.net to get a copy of this message
Antony Dovgal wrote:
On 06.06.2007 01:10, mark@cyanox.nl wrote:
<?php class class1{ public $c2; function __construct($c2){
    $this->c2 = $c2;
} } class class2{ public $c1; function setC1($c1){
    $this->c1 = $c1;
} function test(){
    echo $this == $this->c1->c2?'equals':'not equals'; // Somehow this if statement triggers the error.
} } $tt = new class2(); $t = new class1($tt); $tt->setC1($t); var_dump($t); $tt->test(); ?> I get the error: Fatal error: Nesting level too deep - recursive dependency? in /home/cyanox/DEV/test_object_recursion.php on line 15
$t->$tt->$t->$tt->$t->$tt->$t->$tt->$t->$tt->$t and so on. So you get endless recursion when comparing the objects.
Although it is obvious that there is a recursion I think this simple example should work without error.
Sure, if you have any proposals/ideas - feel free to share them. Actually theoretically it should not give an error. I just stumbled upon this odd behavior when doing something very odd which would not work anyway so I can't really think of a situation where the correct behavior would be needed. Anyway the following also gives the error.
<?php class class1{ public $c2; function __construct($c2){ $this->c2 = $c2; } } class class2{ public $c1; function test(){ $this == $this->c1; // no error. $this == $this; // errors. } } $tt = new class2(); $t = new class1($tt); $tt->c1 = $t; $tt == $t; // no error. //$t == $t; // errors. //$tt == $tt; // errors. $tt->test(); // errors. ?>

« previous php.internals (#30098) next »