[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Класс Таймер
Johnny
Класс юзаю для измерения производительности скриптов.
PHP
<?php

    
/**
     * Класс Таймер
     * позволяет запускать и останавливать как
     * именованные интервалы, так и нет.
     *
     * Пример использования:
     *      Timer::start('one');
     *      sleep(1);
     *      Timer::start('two');
     *      sleep(1);
     *      Timer::stop();
     *      Timer::stop();
     *
     * Выведет:
     *      two — 1 сек
     *      one — 2 сек
     * т.е. ф-я stop вызванная без параметров останавливает таймеры
     * в обратном запуску порядке
     *
     * Но можно остановить таймер и по имени:
     *      ...
     *      Timer::stop('one');
     *      Timer::stop('two');
     * Выведет:
     *      one — 2 сек
     *      two — 1 сек
     *
     * Второй параметр ф-и stop
     * в случае true выводит результат ввиде массива
     * array( 'name'=>имя таймера, 'value'=>значение )
     *
     */
    
class Timer {

        private static 
$__timers = array();

        static public function 
start$name null ) {
            if( 
$name ) {
                
self::$__timers[$name]['start_time'] = microtimetrue );
            } else {
                
self::$__timers[]['start_time'] = microtimetrue );
            }
        }         

        static public function 
stop$name null$show_result true ) {
            if( 
$name === null ) {
                
$name array_poparray_keys(self::$__timers) );
            }
            if( 
self::__check_key($name) ) {
                
self::$__timers[$name]['end_time'] = microtimetrue );
                
self::__calc_difference$name );
                if( 
$show_result ) {
                    echo 
self::__show_result$name );
                } else {
                    return 
self::__show_result($nametrue);
                }
                
self::__unset$name );
            }
        }

        static public function 
result() {
            return 
self::__show_result();
        }

        private static function 
__show_result$name$as_array false ) {
            
$value roundself::$__timers[$name]['difference'] , );
            if( !
$as_array ) {
                return 
"{$name} &mdash; " $value " сек";
            } else {
                return array( 
'name'=>$name'value'=>$value );
            }
        }

        static private function 
__unset$name ) {
            unset( 
self::$__timers[$name] );
        }

        static private function 
__calc_difference$name ) {
            
self::$__timers[$name]['difference'] = self::$__timers[$name]['end_time'] - self::$__timers[$name]['start_time'];
        }

        static private function 
__check_key$name ) {
            return 
array_key_exists($nameself::$__timers);
        }

    }



_____________
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.