Voglio presentare una semplice classe per gestire un timer.
L'idea è nata dalla necessità di misurare il tempo impiegato ad eseguire uno script...al tempo stesso volevo un codice semplice e riutilizzabile per risolvere definitivamente il problema.
L'interfacccia della classe è davvero molto semplice e ricorda quella di un cronometro:

codice:
&sect Caratteristiche
   
      Unità di misura  :      [ms]
      Risoluzione      :    1 [ms]
      Tempo misurabile : &plusmn 24 giorni (int a 32 bit)


&sect Interfaccia base
   
      ::Read()
           Ritorna il tempo misurato in ms (valore intero)

      ::Reset()
           Resetta il cronometro


&sect Interfaccia avanzata
   
      ::Stop()
           Mette in pausa il cronometro

      ::Restart()
          Fa ripartire il cronometro

      ::Reset($elapsed)
          Resetta in modo che il  tempo trascorso sia pari a $elapsed
          $elapsed può essere negativo
          NOTA: si può anche usare come parametro nel costruttore
ok...qui la classe

codice:
class Timer
{

  // costruttore
  function Timer($elapsed = 0)
  {
    $this->b_stop = false;
    $this->reset($elapsed);
  }
  
  // ritorna millisecondi trascorsi
  function read(){
    return( $this->abstime()-$this->s_time );
  }
  
  // resetta il timer
  function reset($elapsed = 0){
     $this->s_time = $this->p_time = ($this->now()-$elapsed);
  }
    
  // mette in pausa (read() ritornerà sempre lo stesso valore)
  function stop(){
    $this->b_stop = true;
    $this->p_time = $this->now();
  }
  
  // toglie pausa 
  function restart(){
    $this->b_stop = false;
    $this->s_time += ($this->now() - $this->p_time); 
  }
    
  // ritorna tempo assoluto in millisecondi(tenendo conto della pausa)
  function abstime(){
    return($this->b_stop?$this->p_time:$this->now());
  }
  
  // ritorna tempo assoluto in ms  
  function now(){
     list($usec, $sec) = explode(" ",microtime());
     return ( (int)(1000*((float)$usec + (float)$sec))); 
  }
  
  var $s_time;  //tempo iniziale
  var $p_time;  //tempo al momento della pausa
  var $b_stop;  //in pausa? 
}
Un esempio semplice semplice di utilizzo (suppongo la classe si trovi nel file timer.php)

codice:
<?php

   require 'timer.php';

   $timer = new Timer();

   // ciclo per far passare qualche frazione di secondo
   for($i=0; $i<2000000; $i++){
   }

   echo "Tempo trascorso : ".$timer->read()."[ms]
";

?>
Per i (PHP5) perfezionisti:

le tre variabili dovrebbero essere private
il metodo now() statico
il metodo abstime() privato

Per il resto che devo dire? Tutto lì...ma non dite che non vi avevo avvertito! Era solo una (micro)pillola!