Source of packages/Combie/Time/Timer.php
<?php
/**
 * Timer
 *
 * Eine Stoppuhr fÃÂür performance Messungen
 *
 * Beispiel:
 *<code>
 *<?php
 * use Combie::Time;
 *
 * echo "<br>Test des Timers<br>";
 *
 * // ein Timer Objekt erzeugen
 * $timer = new Time\Timer;
 *
 * $timer->start(); // starten
 *
 * $test = glob('../*'); //  der zu messende Code
 *
 * $timer->stop(); // stoppen
 *
 * // Ausgabe
 * echo '<br>Abgelaufene Zeit:<br>';
 * echo $timer->usedtime().'<br>';
 *
 *</code>
 *
 *
 * @filesource
 * @author Combie <uli@combie.de>
 * @version $Id$
 * @package Combie
 * @subpackage Time
 */
namespace Combie\Time;
/**
 * Timer
 *
 * Ein Modul fÃÂür Zeitmessungen
 * @example packages/Combie/tests/time/test_timer.php
 * @package Combie
 * @subpackage Time
 */
class Timer
{
/**#@+
 * interne Variablen
 * @var float Zeit
 */
  private static $wasserkopf  = 0;
  private $start              = 0;
  private $stop               = 0;
/**#@-*/
/**
 * Konstruktor
 *
 * konstruiert das Objekt und berechtet, wenn noch nicht geschehen,
 * die Wasserkopfkonstante um MesswertverfÃÂäschungen zu verhindern
 * @return void Keine RÃÂückgabe
 */
  public function __construct()
  {
   if(0 === self::$wasserkopf)
       $this->scale();
  }
/**
 * Berechnung der Wasserkopf Konstanten
 *
 * Berechtet die Wasserkopf Konstante und speichet sie
 * in der statischen Variablen $wasserkopf
 * @return void Keine RÃÂückgabe
 */
  private function scale()
  {
    $times = array();
    for ($i=0;$i<20;$i++)
    {
      $this->start();
      $times[] = $this->stop();
    }
    sort($times);
    for ($j=0;$j<4;$j++) array_pop($times);
    self::$wasserkopf = array_sum($times) / count($times);
  }
/**
 * Benutzte Zeit
 *
 * Berechtet die Abgelaugfene Zeit und gibt sie zurÃÂück
 * @return float Abgelaufenen Zeit
 */
  public function usedtime()
  {
    if($this->stop === 0)
    {
      return microtime(TRUE) - $this->start - self::$wasserkopf;
    }else
    {
      return $this->stop - $this->start - self::$wasserkopf;
    }
  }
/**
 * Start Timer
 *
 * Startet den Messvorgang und gibt die Startzeit zurÃÂück
 * @return float Start Zeit
 */
  public function start()
  {
    $this->stop = 0;
    $this->start = microtime(TRUE);
    return $this->start;
  }
/**
 * Stop Timer
 *
 * Stoppt den Messvorgang und gibt die verbrauchte Zeit zurÃÂück
 * @return float Start Zeit
 */
  public function stop()
  {
    $this->stop = microtime(TRUE);
    return $this->usedtime();
  }
  
/**
 * Mehrfache AusfÃÂührung
 *
 * FÃÂührt eine Funktion mehrfach zur Zeitmessung aus und gibt den Mittelwert
 * der pro durchlauf verbrauchten Zeit zurÃÂück
 * @return float Mittelwert der verbrauchten Zeit
 */
  public function n_times($anzahl,$function/* weitere Parameter */)
  {
    $params = func_get_args();
    array_pop($params);
    array_pop($params);
    $times = array();
    for ($i=0;$i<$anzahl;$i++)
    {
      $this->start;
      call_user_func_array($function,$params);
      $times[] = $this->stop();
    }
    return array_sum($times) / count($times);
  }
/**
 * Wasserkopf
 *
 * Gibt die Zeit zurÃÂück, welche von der Klasse intern fÃÂür jede Messung
 * verbraucht wird
 * @return float Wasserkopf
 */
  public function lag()
  {
    return self::$wasserkopf;
  }
}
 
?>