C#ではよく以下のように Disposer を使って特定区間の時間を計測するような以下のようなクラスを作って使ったりしています。
using(new ScopedStopwatch(time => Console.WriteLine($"hoge: {time} ms")))
{
// 時間を計測したい処理
}
PHPでも似たようなことができないのか調べたら自分で Disposer 的なものを作ればできそうなことがわかったので作ったものを載せておきます。(ただし、以下の例はPHP 7以降でないと動作しないと思います)
class ScopedStopwatch
{
private $start;
private $logFunc;
function __construct($logFunc) {
$this->logFunc = $logFunc;
$this->start = microtime(true);
}
function dispose() {
$end = microtime(true);
$milliseconds = ($end - $this->start) * 1000;
($this->logFunc)($milliseconds);
}
}
function using($disposable, $func) {
$func();
$disposable->dispose();
}
以下が利用例です。これで毎回開始時間、終了時間をとって引き算するコードを書かなくて済みます。
using(new ScopedStopwatch(function($ms){ echo $ms." ms"; }), function(){
// 計測したい処理
});
// 実行結果例: 1003.231048584 ms
ついでにJavaScriptではこちらの記事のようにすれば同様のことが可能です。