At 03:36 08.11.2002, Tim Molendijk said:
>begin first code snippet --------------------------------
>/* New Container object created. At the same time it sets a Child object in
>its $child attribute. (This is indicated by passing TRUE.) */
>                $testContainer1 = new Container(TRUE);

Ahh - culprit 1:

You said the container is creating a child instance - I assume it's done in
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()

>Below the code for the classes Container en Child.
>begin third code snippet --------------------------------
>class Container
>    var $children;
>    var $property;
>    // stuff deleted
>    function load()
>    {
>        $newChild = new Child(1);

Again - make this
        $newChild =& new Child(1);

>    function add($child)
>    {
>/* Here a reference of $this (the Container object) is assigned to $child's
>$parent attribute. */
>        $child->parent = &$this;
>/* Here $child (the newly created Child object) is assigned to the
>container's $child property. */
>        $this->child = &$child;
>    }

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!

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 deal
with pointers, but unfortunately PHP doesn't have them. So keep an eye open .-)

   >O     Ernest E. Vogelsinger
   (\)    ICQ #13394035

PHP General Mailing List (
To unsubscribe, visit:

Reply via email to