Als ich mich vor einiger Zeit über array_key_exists aufgeregt habe, habe ich eine Funktion namens getmicrotime () verwendet, die mir im Wesentlichen nur die Berechnung der Zeit vereinfacht hat. Das verwendet Beispiel sollte auch nur die Ausführungszeit berechnen und war für diesen Zweck durchaus geeignet. Der Nachteil einer solchen Lösung ist, dass man immer wieder die Startzeit setzen muss, dann zu gegebener Zeit die Berechnung macht und am Ende das Resultat formatiert ausgibt. Kein Problem!? Oder doch?
In komplexen Systemen kann man oft nur schwer die Seiteneffekte abschätzen, die eine Änderung mit sich bringt. Software vergammelt, sagt man. Nicht weil diese irgendwo rumliegt und ihr Verfallsdatum überschreitet, sondern weil Änderungen vorgenommen werden oder die Umgebung sich ändert. Das Paradigma der Objektorientierung soll hier Abhilfe schaffen können. Eine weitere Klasse kann die gewünschten Funktionalitäten kapseln und ein Fehler kann schnell lokalisiert werden.
Meine Lösung für die gewünschte Funktionalität, die Ausführungszeit messen zu können, sieht so aus:
[code lang="php"]
class Timer {
var $_start;
function Timer () {
$this->_start = $this->now ();
}
function now () {
return array_sum (explode(' ', microtime()));
}
function get () {
return $this->now () - $this->_start;
}
}
[/code]
Die Formatierung der Ausgabe will ich den anderen Klassen überlassen, die diese Information verwenden sollen. Wird ein Objekt instantiiert, wird der Konstruktor automatisch die Startzeit setzen. get sollte dann die einzige explizit aufgerufene Methode sein. Bestehen beispielsweise schon Klassen für die Generierung einer HTML-Seite, kann man sich den Einsatz in etwa so vorstellen:
[code lang="php"]
class Page {
function Page () {
$this->_timer = new Timer ();
}
/***
Weiterer Code
***/
function getTime () {
return sprintf ("%10f", $this->_timer->get ());
}
}
[/code]
Have fun!