Re: Destructor Order

From: Date: Wed, 22 Oct 2008 07:31:38 +0000
Subject: Re: Destructor Order
References: 1 2  Groups: php.internals php.internals 
Request: Send a blank email to internals+get-41315@lists.php.net to get a copy of this message
Alexey Zakhlestin wrote:
On Wed, Oct 22, 2008 at 5:03 AM, Ryan Panning <rpanning@gmail.com> wrote:
I've been wondering, is such a thing even possible? Is there a good way to implement an object destruct order? Here are my thoughts: In the class definition, specify what "level" of destruction the objects should be on. How, I have no idea, I haven't thought of a good syntax. It should be an integer for what level though. Then when the script ends, the engine starts with the highest most level of destruction. It continues down until everything has been destructed. With the last most level being objects with unspecified levels. Note: Each level can have more than one class. Example destruction order: 3 = database records (ActiveRecord or such) 2 = database connection object 1 = framework objects 0 = objects with unspecified level
Why would you need such thing? PHP uses reference-counting and destroys objects as soon, as there are no more references to them. Since PHP 5.3, it also detects cyclic-references and periodically destroys object-groups which have references to each other, but do not have references from external context.
Additionally, AFAIK in an ideal situation a destructor should only destroy objects which exist during the lifetime of an instance of the class containing the destructor. If objects have a greater lifespan (i.e. shared) then they should be destroyed by other means, like at the end of their lifespan or at the end of your script.

« previous php.internals (#41315) next »