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