|
Posted by Jochem Maas on 04/20/05 21:21
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
>
[Back to original message]
|