Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [klasa] timer
Forum PHP.pl > Inne > Oceny
flashdev
Witam,
Na własne potrzeby napisałem poniższą klasę.
Możecie oceniać, krytykować, używać w swoich projektach ile sie da smile.gif
To moja pierwsza klasa więc proszę o wyrozumiałość.

  1. <?php
  2. abstract class class_timer {
  3.    private static $data = array();
  4.  
  5.    public static function addTimer($name){
  6.        if( isset(self::$data[$name]) ){
  7.            return false;                //    taka nazwa juz istnieje
  8.        }else{
  9.            self::$data[$name] = array('stoped' => false, 'time' => self::getTime() );
  10.            return true;                //    timer zostal dodany
  11.        }
  12.    }
  13.    
  14.    public static function stopTimer($name){
  15.        if( isset(self::$data[$name]) ){
  16.            self::$data[$name] = array('stoped' => true, 'time' => self::getTime() - self::$data[$name]['time'] );
  17.            return true;                //    timer zostal prawidlowo zatrzymany
  18.        }else{
  19.            return false;                //    podany timer nie istnieje
  20.        }
  21.    }
  22.    
  23.    //    $format = 0 -> return = array
  24.    //    $format = 1 -> return = string formatted
  25.    public static function getTimers($format = false){
  26.        $arr = array();
  27.        foreach (self::$data as $key => &$value) {
  28.            if( !$value['stoped'] ){
  29.                self::stopTimer($key);
  30.            }
  31.            $arr[$key] = $value['time'];
  32.        }
  33.        if( $format ){
  34.            $res = "<!-- timers:\n";
  35.            foreach (self::$data as $key => &$value) {
  36.                $res .= $key . "\t-\t" . $value['time'] . "\n";
  37.            }
  38.            $res .= "-->\n";
  39.            return $res;
  40.        }
  41.        return $arr;
  42.    }
  43.  
  44.    private static function getTime(){
  45.        $t = explode(" ", microtime());
  46.        return (float)$t[1] + (float)$t[0];
  47.    }
  48. }
  49. ?>


mały opis:
Klasa służy do pomiarów czasów różnych wydarzeń na stronie.
addTimer
- dodaje timer o nazwie podanej w parametrze oraz zwraca true
- jesli taki timer istnieje - zwraca false
stopTimer
- zatrzymuje timer podany w parametrze oraz zwraca true
- jesli timer nie istnieje - zwraca false
getTimers
- zatrzymuje wszystkie timery oraz zwraca wartosc zalezna od podanego parametru
- dla true zwraca wartosci timerow w formacie string + komentarze html
- dla false (domyslnie) zwraca tabele w formacie tablica[nazwa_timera] = float(wartosc_timera)
Pr0100
czemu $data jest statyczna?
flashdev
Cytat(Pr0100 @ 6.07.2009, 00:45:03 ) *
czemu $data jest statyczna?


Korzystam z tego w taki sposób i mi wszystko działa prawidłowo.

  1. <?php
  2. include("class_timer.php");
  3. class_timer::addTimer('main');
  4. //...
  5. class_timer::stopTimer('main');
  6. echo class_timer::getTimers(true);
  7. ?>


Być może nie rozumiem jeszcze dokłądnie jak tworzyć statyczne klasy. Nie wiem czy nie ma jakiegoś błędu, wiec proszę o uwagi to i może czegoś sie nauczę.
Moim zdaniem użycie tutaj statcznyej klasy jest jak najbardziej na miejscu.
Pr0100
Cytat
Być może nie rozumiem jeszcze dokłądnie jak tworzyć statyczne klasy. Nie wiem czy nie ma jakiegoś błędu, wiec proszę o uwagi to i może czegoś sie nauczę.
Moim zdaniem użycie tutaj statcznyej klasy jest jak najbardziej na miejscu.


yyy nie ma klasy statycznej,

klasa abstrakcyjna
metoda statyczna

zresztą nich Ci to wytłumaczy ktoś bardziej kompetentny ... smile.gif

  1. <?php
  2. abstract class class_timer
  3. ?>

  1. <?php
  2. public static function addTimer //wszystkie metody
  3. ?>

  1. <?php
  2. self::$data //zamiast class_timer::$data
  3. ?>
flashdev
Poprawiłem i dalej działa.
We flashu (as3) to by nie przeszła taka dowolność kodu jak w php.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.