<?php
class Timer i <
var $timers = array();
function TimerO ;
i
// Nothing
}
function =
{
$time_portions = explode(' microtimeO);
$actual_time =, $time_portions[1] . substr($time_porti6ns[0], 1);
$this->timers['$name'] = $actual_time;
)
function timerStop($name = 'default') {
$time_portions = explodeC ', microtimeO);
Sactual _time - $tiffle_portions[1 ] . ^bstr($tiiiie_portions[0]f 1);
$elapsed_time = bcsub($actual_time, $this->timers['$name'], 6);
return $elapsed time;
}
? > ' -
Класс Timer вычитает одно время из другого с помощью функции bcsub(), гарантирующей применения арифметики с повышенной точностью.
Сообщение error_message(undefinec function bcsub ............. ) означает, что функции bcmath не были скомпилированы с РНР. Добавьте -enable-bcmath в строку конфигурации, перекомпилируйте РНР и попытайтесь выполнить сценарий снова.
Мы проверили основу работы класса таймера. Еще один класс таймера входит в состав PEAR в файле pear/Benchmark/Time г. php дистрибутива РНР. Класс PEAR отличается большей полнотой и сложностью.
Напишем другой класс - Time_Info, показывающий время, затраченное на выполнение функции phpinfoQ и функции multiply(), умножающей большие числа:
<?php
// Этот тестовый класс показывает время, затраченное на выполнение функции, // содержащей phpinfo(), и другой функции, перемножающей большие числа.
class {
// Конструктор function Time„Info(){}
// Метод 1: содержит встроенную функцию phpintoO
function phpinf() {
phpinfoO;
}
// Метод 2: перемножение больших чисел
function {
$multiplied=10000*10000*10000*10000;
I
)
?>
Напишем теперь более сложный сценарий, основываясь на приведенном примере. Окружим каждый подозреваемый участок кода вызовами timer- и чтобы измерить время выполнения фрагментов:
<?php
// Инициализация
require_once("Timer.php"); require_once("Time_Info.php");
$tim = newTimer();
$tim->timerStart('total');
$tim->timerStart(); $foo = newTime_Info();
print("Constructor: " ., $tim->timerStop() . "<br>");
$tim->timerStart(); $res1 = $foo->phpinf();
print( "Method"!: " . $tim->timerStop() . "<br>");
$tim->timerStart();
$res2 = $foo->multiply();
print("Method2: " . $tim->timerStop() . "<br>');
echo($res1); echo($res2);
print("Total execution time: , $tim->timerStop('total') . "<br>");
?>
Посмотрим, сколько времени заняли конструктор, php_inf() и multiply(), а также общее время выполнения сценария: