<?php 

define
("GETTIME"'$timer->gettime()'); 

class 
timer

   var 
$times

   function 
getmicrotime(){ 
      list(
$usec$sec) = explode(" ",microtime()); 
      return ((float)
$usec + (float)$sec); 
   } 

   function 
timer(){ 
      
$this->times['total']["start"] = $this->getmicrotime(); 
   } 

   function 
start($name){ 
      echo 
"<hr>Starting $name<hr>\n"
      
$this->times[$name]["start"] = $this->getmicrotime(); 
      unset(
$this->times[$name]["stop"]); 
   } 

   function 
stop($name$decimals 10){ 
      if( isset(
$this->times[$name]['start']) ){ 
         
$this->times[$name]["stop"] = $this->getmicrotime(); 
         return 
number_format($this->times[$name]["stop"]-$this->times[$name]["start"],$decimals); 
      }else{ 
         echo 
"<hr>$name is not set<hr>\n"
      } 
   } 

   function 
getextratime($decimals 10){ 
      
$timetotal 0
      while( list( 
$k) = each$this->times)){ 
         if( 
$k != 'total' $timetotal += (int)$this->gettime($k); 
      } 
      
reset($this->times); 
      return 
number_format($this->gettime("total") - $timetotal$decimals); 
   } 

   function 
gettime($name "total"$decimals 10){ 
      if( !isset(
$this->times[$name]["stop"]) ){ 
         return 
number_format($this->getmicrotime() - $this->times[$name]["start"],$decimals); 
      }else{ 
         return 
number_format($this->times[$name]["stop"] - $this->times[$name]["start"],$decimals); 
      } 
   } 

   function 
showtimes($decimals 10$format "%name: %time<br>\n"){ 
      while( list( 
$k$v) = each($this->times)){ 
         echo 
str_replace(array("%name""%time"), array($k$this->gettime($k,$decimals)), $format); 
      } 
      
reset($this->times); 
   } 


?>