"Ernest E Vogelsinger" <[EMAIL PROTECTED]> wrote in message
> At 03:36 08.11.2002, Tim Molendijk said:
> --------------------[snip]--------------------
> Ahh - culprit 1:
> You said the container is creating a child instance - I assume it's done
> the constructor...
> What you're doing here is to create a clone when assigning new()'s result
> to $testContainer1. You should rather
>         $testContainer1 =& new Container(TRUE);
> Note the ampersand here - if you don't you'll get a clone.
> Rule for references:
> If your object does something in its constructor, use a reference
> assignment for
>         new class()


Before your post I accidently found out a solution:
$testContainer1 = &new Container(TRUE) instead of $testContainer1 = new

When I found this out I didn't understand WHY this was the solution...

Thanks to your comments I DO understand why... I suddenly see every jigsaw
piece fall in place :D

The difference between the first code snippet (that with $testContainer1)
and the second code snippet (that with $testContainer2) is that in code
snippet 2 the Container object is already constructed and assigned to
$testContainer2 when loading it. Then when it is loaded $this (in add())
refers to the object in $testContainer2 so no problem occurs.
But in code snippet 1 the Container object loads itself before it is
assigned to $testContainer1. During this process $this (in add()) refers to
the object that is being created. And now the core is: the object that is
being created is *not* the same object as the one that is assigned to
$testContainer1!! So the references to the created object will not refer to
$testContainer1!! That's it!!! I completely understand... Thanks a lot

> Again - make this
>         $newChild =& new Child(1);
> But you don't pass "$child" by reference! Make this
>         function (&$child)
> If you don't pass $child as a reference, the line
>         $child->parent = $this;
> will set the parent value of the clone that's passed as an argument, and
> leave the "original" $child unmodified!

This is not true in my case, because instead of doing:
function add(&$child) { ... }
I do:
function add($child) { ... }
and then call it with:

This has the same result... As far as I know I doesn't matter whether you
put an ampersand before the variable in your function definition or your in
your function call.

> Crosscheck all of your class code (and the code utilizing it) it you're
> always passing references. Ref's work like a charm until you mess up at a
> single location. Well, having made my way from C/C++ to PHP I'd rather
> with pointers, but unfortunately PHP doesn't have them. So keep an eye
open .-)

The problem is solved and I completely understand why now. This last thing
is thanks to you Ernest.


> --
>    >O     Ernest E. Vogelsinger
>    (\)    ICQ #13394035
>     ^     http://www.vogelsinger.at/

PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to