<?php function makeTimer($label) { $startTime = microtime(true); return function ($milestone) use($label, $startTime) { $elapsedTime = (int) (microtime(true) - $startTime) * 1000; return "({$label}: {$milestone}) elapsed time: {$elapsedTime}ms"; }; } $timer1 = makeTimer("First Timer"); echo $timer1("At start") . "<br>"; sleep(1); $timer2 = makeTimer("Second Timer"); echo $timer2("At start, 1s after timer1") . "<br>"; echo $timer1("After 1sec") . "<br>"; sleep(1); echo $timer2("After 1sec") . "<br>"; echo $timer1("After another second") . "<br>";
<?php function makeTimer($name) { $startTime = microtime(true); return function ($milestone) use($name, $startTime) { $currentElapsedTime = microtime(true) - $startTime; return sprintf("%s (%s): %dms\n", $name, $milestone, $currentElapsedTime * 1000); }; } $firstTimer = makeTimer("Timer 1"); echo $firstTimer("started"); sleep(1); $secondTimer = makeTimer("Timer 2"); echo $secondTimer("started"); echo $firstTimer("after Timer 2 started"); sleep(1); echo $firstTimer("a coupla seconds later"); sleep(1); echo $secondTimer("at the end");