![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 243 Pomógł: 1 Dołączył: 1.06.2010 Ostrzeżenie: (0%) ![]() ![]() |
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. |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 2 178 Pomógł: 596 Dołączył: 25.09.2009 Skąd: Piwniczna-Zdrój Ostrzeżenie: (0%) ![]() ![]() |
Zaprezentowana klasa QueryIterator pozwala na sekwencyjne (jeden po drugim) przejrzenie wyników dowolnego zapytania do bazy danych PostgreSQL. Nie realizuje ona jednak wszystkich możliwości Iteratora np. ze względu na to, że wyniki mogą być przeglądane tylko do przodu, nie można ich przejrzeć ponownie, ani też wrócić do poprzedniego.
Cytat Nie wiem też co za różnicę robi $this->key+=1; bo za komentowanie tej linii powoduje dalej poprawne działanie klasy. Akurat w przedstawionej klasie key (klucz, index) nie jest wykorzystywany. Natomiast key() pobiera indeks elementu tablicy, który aktualnie przeglądamy. Cytat Nadal nie rozumiem jednak w jaki sposób current() wie, że wywołałem metodę next() na tej tablicy $data i że zwiększyłem dla na niej wskaźnik. Metoda current() wcale nie wie, że wywołałeś metodę next(). Zauważ tylko, że zarówno current() jak i next() operują na tej samej zmiennej $this->data, przy czym current() pobiera wartość tej zmiennej, a next() tę wartość nadpisuje. Natomiast metoda rewind() (pol. przewiń) powinna przywrócić nam stan początkowy, ale tutaj również nie jest wykorzystywana. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 10.10.2025 - 22:52 |