Hi,

In the Zend Engine I assume each (referenced) variable has some sort of
reference counter so that when the last reference is lost the memory is freed
up, am I right? If I am has anyone ever suggested or are there any plans to
make this available to the php scripts, this goes for the object pointers (or
whatever you call them) in the Zend 2 Engine.

This would be extremely useful if you had a object loader which either loaded a
object from the database or returned the already loaded object, but cleanup up
automatically (if that made any sense). Here is some code to explain:

<?
// This is Zend Engine 1 Code

/*
 * Object to be loaded
 */
class MyObject {
    var $id;
    var $someParam;
}

/*
 * Object loader class
 */
class ObjectLoader {
    var $objects = array();

    // Example load function
    function &loadFromDatabase($id) {
        $res = mysql_query("
                            select id,someParam
                            from database
                            where id=$id
                            ");

        $row = mysql_fetch_row($res);

        $obj = new MyObject;

        $obj->id = $row[0];
        $obj->someParam = $row[1];

        return $obj;
    }

    function &loadById($id) {
        // Check if the object is already loaded, if not load it
        if (!isset($objects[$id]))
            $this->objects[$id] =& $this->loadFromDatabase($id);

        // Return the object
        return $this->objects[$id];
    }

    // Session serialise handler
    function __sleep() {
        foreach ($this->objects as $id => $objCpy) [
            // Check if this is the last reference to the object
            if (get_reference_count($this->objects[$id])) {
                // there are no other references to this object
                // so it is unused so we can clear up
                unset($this->objects[$id]);
            }
        }
    }
}
?>

With this code you could create an object loader and store it in session then
load objects from it, (store the references in session if you want), then get as
may references to the same objects just by calling koadById() and you could be
happy that when you have finished with an object it won't stay in you session
causing bloat!

Hope you understood that. Obviously if these reference counters don't exist
then this has been a wasted post but I think its a nice idea.

Cheers
Tom

-- 

***************************************************
Tom Oram
SCL Computer Services
URL http://www.scl.co.uk/
***************************************************

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

Reply via email to