このクラスの挙動は Benchmark_Timer とほとんど同じですが、 調査するコードの中で セクション を定義できるという点が異なります。 セクション は マーカー とは異なり、状態を管理しています。 そして、そのセクションを何度実行したのかといった情報を記憶します。
プロファイリングの開始地点から終了地点までの経過時間情報だけでなく、 すべての セクション についての開始時と終了時の情報が記録されます。 以下の例をごらんください。
手動モードでの Benchmark_Profiler の動作
<?php
require_once 'Benchmark/Profiler.php';
$profiler = new Benchmark_Profiler;
function wasteTime() {
$j = 2;
for ($i = 0; $i < 100; $i++) {
$j = $j * 10;
}
return;
}
function myFunction() {
global $profiler;
$profiler->enterSection('myFunction');
wasteTime();
$profiler->leaveSection('myFunction');
return;
}
// 手動モードなので、手動で開始します
$profiler->start();
wasteTime();
myFunction();
myFunction();
wasteTime();
// 手動モードなので、終了と結果の表示を指示します
$profiler->stop();
$profiler->display();
?>
上の例を PHP CLI SAPI で実行すると、次のように結果を出力します。 Apache SAPI で実行した場合は、同じ結果を HTML 形式で出力します。
Benchmark_Profiler の実行結果
------------------------------------------------------------------------------------ Section Total Ex Time Netto Ex Time #Calls Percentage ------------------------------------------------------------------------------------ myFunction 5.8174133300781E-5 5.8174133300781E-5 2 17.22% Global 0.00033783912658691 0.00027966499328613 1 100.00%
ごらんいただいてわかるとおり、デフォルトの出力結果はあまり有用ではありません。 手動モードの場合は、getSectionInformations() や getAllSectionsInformations() といったメソッドを用いればセクションごとの詳細なプロファイル情報が得られます。 詳細は API ドキュメントを参照ください。