Re: unset and circular references

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Abu Warez wrote:
> --- On Fri, 6/27/08, Thijs Lensselink <dev@xxxxxxxx> wrote:
>   
>> From: Thijs Lensselink <dev@xxxxxxxx>
>> Subject: Re:  unset and circular references
>> To: php-general@xxxxxxxxxxxxx
>> Date: Friday, June 27, 2008, 5:21 PM
>> Quoting Abu Warez <abuwarez@xxxxxxxxx>:
>>
>>     
>
>   
>> I think this happens because there is still a reference to
>>     
>  the B object.
>   
>> According to the manual :
>>
>> The destructor method will be called as soon as all
>> references to a 
>> particular object are removed or when the object is
>> explicitly 
>> destroyed or in any order in shutdown sequence.
>>
>> So as long as A has a reference to B the __destructor will
>> not be called.
>>     
>
> I think you mean: "As long as B has a ref to A (which, indeed, creates B),
> the destructor of A will not be called".
>   
My bad. that's what i meant.
> I agree with that, but in this case the garbage collector should detect
> that the reference to object $a is from an object $m_b which is created (and maintained) again by the first object $a. In other words, if object $a is not needed then its member $m_b (which has a reference to $a) is not needed neither. So in this case, in my opinion, if one wants to destory object $a then the reference from $m_b to $a should not count.
>   
That would still leave a reference from B to A. That's why it doesn't
get unset. If you unset B before unsetting A the problem is resolved.
> This issue is really frustrating because because in my code I have something like (where $a is of type class A):
>
> for ( $id ... )
> {
>     $a = daoMyClass->LoadById( $id );
>     .... modify $a ...
>     /* persist modified $a */
>     daoMyClass->Update( $a );
>     unset( $a );
> }
>
> unset, as stated, does not destroy $a and all the loaded $a's remain in
> memory until the script ends. Rising the memory limit is not a solution
> because the count of $a objects grows between script calls. Any ideas?
>
> Thx,
> Abu
>
>
>
>       
>
>
>   


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


[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux