なんとなくマニュアルを見ていたらPHP7.3.0でhrtimeという関数が増えていました。
むかーしHigh resolution timingというPECLが存在したのですが、それと同じようなものがネイティブで実装されたようです。
この実装は作者のAnatol Belskiがさっさと実装してしまってからフォーラムに話を持ち込んで、他に影響を与えるようなものでもないからRFC通さなくてもいいんじゃね、とあっさりマージされました。
マージされたのは2018年に入ってからで、確認したところPHP7.3.0α1から既に存在していました。
しかしα1の新機能を紹介したときにはこんな関数見た覚えがないんだけどなあ?
と思ったらα1のNEWSには書かれておらず、α2のNEWSでα1の変更点に追加されていました。
どういうことだ。
hrtime
使い方
$a = hrtime(true); // 数値になる
$b = hrtime(true);
var_dump($b - $a);
var_dump(hrtime()); // [秒, ナノ秒]
普通の関数なので普通に使うだけです。
その他
プラットフォームによって時刻の取得方法が異なります。
WindowsであればQueryPerformanceCounter。
Linux等であればclock_gettime。
iOSであればmach_absolute_time
HP-UXであればgethrtime
AIXであればread_wall_time。
各プラットフォームにおける最も高精度な時刻取得方法を採用しているようです。
正直知らないプラットフォームもあるんだけど、PHPって色々対応してるんですね。
感想
非常に高精度な時計や時間計測を必要とする分野には役立つかもしれません。
しかしQueryPerformanceCounterの分解能は100ナノ秒以上なので、ナノ秒単位の超高精細カウントはあまり意味がなかった。