Аргерих Л. О языке РНР. Часть 5. Страница 92


<?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(), а также общее время выполнения сценария: