Re: Classes, Constructors, References and Recursion

From: Date: Wed, 20 Apr 2005 18:21:05 +0000
Subject: Re: Classes, Constructors, References and Recursion
References: 1  Groups: php.general 
Request: Send a blank email to php-general+get-213522@lists.php.net to get a copy of this message
Evert|Rooftop Solutions wrote:
Hi, I have this piece of code: class test1 {
       var
               $data = 'hi',
               $node = false;
       function test1() {
               $this->node =& new test2($this);
       }
} class test2 {
       var
               $data = 'yoyo',
               $root = false;
       function test2(&$root) {
               $this->root =& $root;
       }
} $test =& new test1(); echo('<pre>'); print_r($test); echo('</pre>'); And it outputs: test1 Object ( [data] => hi [node] => test2 Object
       (
           [data] => yoyo
           [root] => test1 Object
               (
                   [data] => hi
                   [node] =>  *RECURSION*
               )
       )
) while it should output: test1 Object ( [data] => hi [node] => test2 Object
       (
           [data] => yoyo
           [root] => *RECURSION*
       )
)
does the output of print_r() correlate with whats actually happening? i.e. is the first test1 object not a reference of the second test1 object (as per the print_r() dump). what does the following show? (I don't have php4 at hand): var_dump($test); also I believe print_r() and var_dump() have a few odditities regarding display of recursion with regard to objects... internals mailinglist archive might tell you more on that. does the following show different output? <?php class test1 {
    var $data = 'hi', $node = false;
    function test1()
    {
        $this->node =& new test2();
$this->node->root =& $this;
    }
} class test2 { var $data = 'yoyo', $root = false; } $test =& new test1(); echo "<pre>"; print_r($test); echo "<hr />"; var_dump($test); echo "</pre>"; ?>
I know there are some difficulties using references in constructors, but I think this should be right.. I'm using PHP/4.3.11. Can anyone tell me what is wrong with this code or why PHP behaves this way?
go for php5 if you can, you'll have alot more fun with object then :-) ....no more '&'s for starters.
regards, Evert


« previous php.general (#213522) next »