Hi,

I'm using php 5.2.1 on an Ubuntu machine.

I have the following class diagram (observer pattern):

+---------+             +---------+             +-------------+
| class A |<#>--------->| class B |< >--------->| interface C |
|         |             +---------+             |             |
|         |-----------------------------------|>|             |
+---------+                                     +-------------+

in my case class A, the creator of class B, is also the class to observe 
for class B. The following code implements the above diagram:

<?php

interface C
{
}


class B
{
        var $m_ObsC;

        public function __construct( C $p_ObsC )
        {
                $this->m_ObsC = $p_ObsC;
        }

        public function __destruct()
        {
                echo "B::destruct called <br>";
        }
}

class A implements C
{
        var $m_b;

        public function __construct()
        {
                $this->m_b = new B( $this );
        }

        public function __destruct()
        {
                echo "A::destruct called <br>";
        }
}

$a = new A();

unset( $a );

echo "<br>-----end-of-script----<br>";

?>


the output of the above code is:

-----end-of-script----
A::destruct called
B::destruct called 

So actually the memory used by object $a is freed only after the script 
ends and NOT when unset was called. Now this is a big problem for me, 
because i need to free the memory when I call unset and not after the 
script ends else php runs out of memory in my real application. Object $a 
is not referenced by any other object. I also tried with:

$this->m_b = new B( &$this );

but the result is the same.

Any clue how to determine php tho free the memory when unset is called and 
not after the script ends?

Thanks,

Abu


      


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

Reply via email to