On Tue, 2007-03-20 at 11:52 +0100, Jochem Maas wrote:
> ok, I tried it in a whole number of variations -
> no joy.
> 
> you should use php5 if you want this kind of reference
> stuff - in php5 it just works, php 4 will give you big headaches.

Now now, don't be calling PHP5 "ALL THAT" when it can't do it right
either (or did you not check it using PHP5 ;) ;) Everything works fine
in PHP4 (also for PHP5 in this case if you just understand that static
vars are buggy *lol* -- and this is first time I've noticed this bug).
Solution follows:

<?php

class B
{
    function B( &$a )
    {
        $this->a = &$a;
    }

    function run()
    {
        echo $this->a->msg."\n";
    }
}

class A
{
    var $msg = null;

    function A()
    {
        $this->b = &new B( $this );
    }

    function &getInstance()
    {
        static $inst = array();

        if( !isset( $inst['staticIsBuggy'] ) )
        {
            $inst['staticIsBuggy'] = &new A();
        }

        return $inst['staticIsBuggy'];
    }

    function run()
    {
        $this->b->run();
    }
}

$a = &A::getInstance();
$a->msg = "Hello world !";

// Some tasks, flow control, scope changes, ...

$a = &A::getInstance();
print "{$a->msg}\n"; // This should print "Hello world !"
$a->run(); // This should print "Hello world !"

?>

Cheers,
Rob.
-- 
.------------------------------------------------------------.
| InterJinn Application Framework - http://www.interjinn.com |
:------------------------------------------------------------:
| An application and templating framework for PHP. Boasting  |
| a powerful, scalable system for accessing system services  |
| such as forms, properties, sessions, and caches. InterJinn |
| also provides an extremely flexible architecture for       |
| creating re-usable components quickly and easily.          |
`------------------------------------------------------------'

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

Reply via email to