Hi Andrew!
On Sat, 14 Jul 2001, Andrew Kirilenko wrote:

> Hello!
> 
> I have following problem:
> 
> <?
> $container = new ccontainer();
> $container->init();
> $container->test1->foo();
> $container->test2->foo();
> $container->test2->owner->test1->foo();
[*]
> $container->test1->owner->test2->foo();
> 
> class ccontainer
> {
>     function ccontainer()
>     {
>     }
> 
>     function init()
>     {
>         $this->test1 = new ctest(&$this);
>         $this->test2 = new ctest(&$this);
>     }
> }
> 
> class ctest
> {
>     function ctest(&$owner)
>     {
>         $this->owner = $owner;
>     }
> 
>     function foo()
>     {
>         echo "test!<br>";
>     }
> }
> ?>
> 
> Output of this script is:
> --->
> test!
> test!
> test!
> Fatal error: Call to a member function on a non-object in c:\www\a.php on
> line 8
> <---
> 
> How to solve this problem???
> 
at the moment marked [*] you are using test1->owner
test1->owner  is ccontainer *before* init() had the chance to set test2 to it,
so the class has no such property "test2".

try a print_r($container) right after $cointainer->init() to see what I mean.

actually, you will notice that test2->owner doesn't have test2 member too!
cause at the moment it was created, the ccontainer was incomplete 
(the expression $this->test2 = new ctest (&$this) evaluates right-to-left)

a quick hack would be to have a circular reference, by saying:
    $this->owner =& $owner; // note the &amp; :)

but the way you create the classes seems just trouble. what exactly are you
trying to achive?
    

-- teodor

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]

Reply via email to