Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [klasa] Planowanie zadań (kolejka) PHP5
Forum PHP.pl > Forum > Gotowe rozwiązania > Algorytmy, klasy, funkcje
Ziels
Witam!

Napisałem klasę do planowania zadań - przydaje się kiedy np. mamy kilka warunków i w każdym musielibyśmy pisać ten sam kod bo jest w nich np. coś definiowane.

Kod jest tutaj

Użycie bajecznie proste:

  1. <?
  2. $queue = new queue( 1 ); //Jeśli podamy 1 to zostaje włączony tryb debugowania - wyświetlane są wszystkie komunikaty co robi klasa
  3.  $queue -> add ( "somefunc( '$arg1', '$arg2' )" ); // wsadzenie funkcji do kolejki
  4.  $queue -> add ( array($object, "someclassmethod('$arg1', '$arg2')" ); // analogicznie z metodą klasy
  5. $pos = $queue -> get_element_position ( "somefunc( '$arg1', '$arg2' )" ); // pobranie pozycji elementu z kolejki
  6. $queue -> remove($pos);  //wywalenie elementu z kolejki
  7. $queue -> run(); // odpalenie kolejki
  8. $queue -> clean(); // wyczyszczenie kolejki
  9. ?>


Można oczywiście manipulować kolejką, zmieniać pozycje elementów, czyścić ją etc. etc.

Jeśli okaże się przydatne i ciepło przyjęte to rozszerzę nieco opis możliwości winksmiley.jpg

Update:
OK, poprawiłem nazwy metod i rzutowanie z (real) na (int).
W najbliższym czasie dopiszę do tej klasy możliwość importowania kolejek z plików, oraz wykonywania zadań tylko o określonej godzinie bądź w przedziale czasowym, lub też jakąś ilość czasu od poprzedniego wykonania - idealne dla crona np. jeśli mamy plik odświeżany co 5 sekund a chcemy coś robić co pół godziny winksmiley.jpg
sticker
może sie czepiam ale :

zamieniłbym
*
  1. <?php
  2. $queue -> enqueue
  3. ?>
na
  1. <?php
  2. $queue -> add
  3. ?>

*
  1. <?php
  2. $queue -> dequeue
  3. ?>
na
  1. <?php
  2. $queue -> remove
  3. ?>
tak bardziej intuicyjne

i zajrzałem do kodu na szybkiego: (w php5 nie pisuje wiec popraw jeżeli sie myle)
* real to liczba rzeczywista a ty chcesz inta wiec lepiej zrobić rzutowanie na integer bo tak to spodziewasz sie że będzie tam liczba zmiennoprzecinkowa
  1. <?php
  2. $this -> max_elems = (real)$elements_number;
  3. ?>



* praktyka programistyczne mowi że lepiej przeorganizować taki kod do postaci: (pomijasz mozliwosc pogubienia sie w blokach)
  1. <?php
  2. public function set_max_elems( $elements_number ){
  3. if(! $elements_number > 0) return false;
  4. $this -> max_elems = (real)$elements_number;
  5. $this -> debug_message('Ustawiono maksymalną liczbę elementów na: ' . $elements_number);
  6. return true;
  7. }
  8. ?>


Poza tym może sie przydac kiedyś tylko jeszcze nie znalazłem zastosowania na potrzeby www ale pewnie takie sie znajdą smile.gif Abo coś wymyśle

btw. debug mi sie podoba smile.gif
cadavre
Zależnie od tego co komu potrzebne.

Ja zamiast powyższej metody kolejkowania używam klasy Collection (plus naturalnie CollectionIterator) wraz z funkcjami zwrotnymi.
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.