At 11:43 06.09.2002, Tom Oram wrote: >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])) {
This should be get_reference_count(...) == 1 > // 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 -- PHP Development Mailing List <http://www.php.net/> To unsubscribe, visit: http://www.php.net/unsub.php