Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Iteratory - jak działa ta klasa ?, HELP
fiasko
post
Post #1





Grupa: Zarejestrowani
Postów: 243
Pomógł: 1
Dołączył: 1.06.2010

Ostrzeżenie: (0%)
-----


  1. class QueryIterator implements Iterator
  2. {
  3. private $result;
  4. private $connection;
  5. private $data;
  6. private $key=0;
  7. private $valid;
  8. function __construct($dbname, $user, $password)
  9. {
  10. $this->connection = pg_connect("host=localhost port=5432 dbname={$dbname} user={$user} password={$password}");
  11. }
  12. public function exceute($query)
  13. {
  14. $this->result = pg_query($this->connection,$query);
  15. if (pg_num_rows($this->result)>0)
  16. $this->next();
  17. }
  18. public function rewind() {}
  19. public function current()
  20. {
  21. return $this->data;
  22. }
  23. public function key()
  24. {
  25. return $this->key;
  26. }
  27. public function next()
  28. {
  29. if ($this->data = pg_fetch_assoc($this->result))
  30. {
  31. $this->valid = true;
  32. $this->key+=1;
  33. }
  34. else
  35. $this->valid = false;
  36. }
  37. public function valid()
  38. {
  39. return $this->valid;
  40. }
  41. }
  42.  
  43.  
  44.  
  45. $qi = new QueryIterator("moja_baza", "use5454" , "65454544444");
  46. $qi -> exceute("select name, email from users");
  47. while ($qi -> valid())
  48. {
  49. echo "<pre>";
  50. print_r($qi -> current());
  51. echo "</pre>";
  52. $qi -> next();
  53. }


Staram się zrozumieć działanie tej klasy. Ale nie do końca wiem co się dzieje .

Zacznę więc od początku :

W utworzonej instancji klasy QueryIterator wywołujemy metodę konstruktora i łączymy się z bazą postgresql.
Następnie wywołujemy metodę exceute w której tworzymy zapytanie do bazy danych na podstawie utworzonego identyfikatora połączenia właściwości connection i zaptyania query. Następnie przypisujemy wynik do właściwości result. Następnie sprawdzamy czy zapytanie zwróciło nam co najmniej jeden wiersz i jeśli tak to wywołujemy kolejna metodę next().

Tu tez nie rozumiem dlaczego ona musi nazwać się next() skoro to nazwa metody ? Z tego co mi się wydaje w definicji metody next(); jej dziłanie jest następujące.
z wyniku zapytania czyli z właściwości result tworozna jest tablica asocjacyjna, która zwraca wynik do właściwości data. Właściwość valid w przypadku pozytywnego zwrócenia wyniku otrzymuje wartość true, a właściwość key zwiększa swoją wartość klucza z 0 o jeden z każdym wywołaniem metody next . Oczywiście wartość false dla właściwości valid wystąpi gdy wywołanie metody nastąpi gdy pg_fetch_assoc nie zwróci wyniku.

No a co dalej to już nie mam pojęcia.

Bo nie wiem co się dzieje i jak są wywoływane metody
public function rewind() {}
public function current()



Proszę o jakieś wytłumaczenie jak działa ta klasa. Niestety autor książki nie opisał, dokładnie sposobu działania klas i tak muszę sam dociekać co i jak .

Dlatego proszę o napisanie co się dzieje dalej.

Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 04:51