On Fri, August 10, 2007 6:01 pm, Nathanael D. Noblet wrote:

I'm not a PHP OOP expert, so this could be 100% wrong, but...

> $obj = new A(); in a loop the object's never released from memory
> because of the internal references it holds. __destruct is not called
> until the end of script execution etc. Now normally in a web request

If __destruct isn't being called until the end of the script, then PHP
thinks you still have some way of accessing that object, and it can't
free it.

> situation this isn't a big deal. However I'm using it in a batch and
> loop over 22 000 records. Since re-assigning the single object I use
> isn't freeing any memory it consumes quite a bit.

Perhaps set some things to NULL or unset them explicitly to convince
PHP that you are done with them.

> I have gotten around
> it by creating a special function in the object to manually release
> the
> recursive references.

Well, there you go.

Release the references so PHP knows you are done with them.

> However it would be nice if there were some sort
> of 'magic' function that could be called on an object so that it knows
> it is being deleted, sort of like a __preDestruct or something like
> that... Is that a bad idea? Or I guess better able to handle recursive
> references in objects would be the other way to solve it I guess.

__destruct is called right before PHP destroys the object.

There really isn't any event of any significance for a __perDesctruct...

Either you're done with it, or you're not...

-- 
Some people have a "gift" link here.
Know what I want?
I want you to buy a CD from some indie artist.
http://cdbaby.com/browse/from/lynch
Yeah, I get a buck. So?

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to