At 03:36 08.11.2002, Tim Molendijk said:
--------------------[snip]--------------------
>begin first code snippet --------------------------------
><?php
>/* 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 --------------------------------
><?php
>
>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
    ^     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