Hi A revised cleanup function for multiple instances of the same class. <? $ref = array(); class cRoute{ var $txt; //identify the class function cRoute($txt=""){ global $ref; $x = count($ref); //get an index $this->txt = $txt; $ref[$x] =& $this; //setup a pointer //create a function $f_txt = 'global $ref; trigger_error("Please call close() to prevent problems, close() has been called for you."); $ref['.$x.']->close();'; $func = create_function("",$f_txt); //register it register_shutdown_function($func); }
function close(){ //close open sockets, etc. mail("yourEmailHere",$this->txt."Callback","Function Close called\n"); } } $c1 = new cRoute("First:"); $c2 = new cRoute("Second:"); echo "exiting now <br>"; ?> Tom At 01:12 PM 12/06/2002, Tom Rogers wrote: >Hi >One way is to create an external reference to your class and use that in >the cleanup function. To make the cleanup function visible it has to be >declared inside the constructor (which makes it invisible to the rest of >the class:) This is how I have done it: > ><? >$ref = array(); >class cRoute{ > function cRoute(){ > global $ref; > $ref[] =& $this; > //register the shutdown function in case people who use this > class dont call the appropiate close methods. > register_shutdown_function("cleanup"); > function cleanup(){ > global $ref; > /cleanup. > trigger_error("Please call close() to prevent problems, close() > has been called for you."); > $ref[0]->close(); > } > } > function close(){ > //close open sockets, etc. > mail("yourEmailHere","callback","Function Close called\n"); > } >} >$clean = new cRoute; >echo "exiting now <br>"; >exit; >?> > > >Tom > > > > > > >At 04:21 PM 12/06/2002, William_dw -- Sqlcoders wrote: >>Hi there!, >>I'm trying to emulate a class destructor, according to the PHP documentation >>I can emulate this by using a call to register_shutdown_function(), >>containing the function to be called upon shutdown. >> >>While this apparently works outside a class, I want to use it inside a >>class, in other words I want to have something like this: >> >>class cRoute{ >> function cRoute(){ >> //register the shutdown function in case people who use this class >>dont call the appropiate close methods. >> register_shutdown_function("cleanup()"); >> } >> >> function cleanup(){ >> //cleanup. >> trigger_error("Please call close() before the page ends, to prevent >>problems close() has been called automatically for you."); >> $this->close(); >> } >> >> function close(){ >> //close open sockets, etc. >> } >>} >> >>I have tried: >> register_shutdown_function("cleanup()"); >> register_shutdown_function("$this->cleanup()"); >> register_shutdown_function($this->cleanup()); >> register_shutdown_function("cDB::cleanup()"); >> >>They all return something like: Warning: Unable to call ()() - function does >>not exist in Unknown on line 0 >> >>If anyone has any ideas I'd appreciate the help. >>Thanks in advance!, >>Dw. >> >> >>-- >>PHP General Mailing List (http://www.php.net/) >>To unsubscribe, visit: http://www.php.net/unsub.php > > >-- >PHP General Mailing List (http://www.php.net/) >To unsubscribe, visit: http://www.php.net/unsub.php > -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php