Iterator - dlaczego to działa? |
Iterator - dlaczego to działa? |
9.05.2012, 19:49:36
Post
#1
|
|
Grupa: Zarejestrowani Postów: 114 Pomógł: 12 Dołączył: 15.02.2012 Ostrzeżenie: (0%) |
Nie wiem za bardzo dlaczego to działa ;P. Funkcja key nie jest nigdzie używana a po jej usunięciu wywala błąd. -------------------- Pomogłem? Kliknij POMÓGŁ
|
|
|
9.05.2012, 20:01:46
Post
#2
|
|
Grupa: Zarejestrowani Postów: 320 Pomógł: 29 Dołączył: 3.04.2010 Ostrzeżenie: (20%) |
Manual -> "implements Iterator", poszukaj o tym interfejsie
|
|
|
9.05.2012, 20:03:02
Post
#3
|
|
Grupa: Zarejestrowani Postów: 114 Pomógł: 12 Dołączył: 15.02.2012 Ostrzeżenie: (0%) |
jak wywale implements Iterator to nadal działa
-------------------- Pomogłem? Kliknij POMÓGŁ
|
|
|
9.05.2012, 20:59:06
Post
#4
|
|
Grupa: Zarejestrowani Postów: 320 Pomógł: 29 Dołączył: 3.04.2010 Ostrzeżenie: (20%) |
Poczytales o tym interfejsie? Chyba nie...
|
|
|
10.05.2012, 06:31:15
Post
#5
|
|
Grupa: Zarejestrowani Postów: 114 Pomógł: 12 Dołączył: 15.02.2012 Ostrzeżenie: (0%) |
To inaczej... kiedy ten warunek będzie nie prawdziwy?
-------------------- Pomogłem? Kliknij POMÓGŁ
|
|
|
10.05.2012, 06:42:55
Post
#6
|
|
Grupa: Zarejestrowani Postów: 664 Pomógł: 169 Dołączył: 8.01.2010 Skąd: Kraków Ostrzeżenie: (0%) |
Ten 'warunek' będzie fałszywy, jeżeli funkcja mysql_fetch_assoc zwróci Ci false (w podlinkowanej stronie jest napisane kiedy).
-------------------- |
|
|
10.05.2012, 07:17:05
Post
#7
|
|
Grupa: Zarejestrowani Postów: 114 Pomógł: 12 Dołączył: 15.02.2012 Ostrzeżenie: (0%) |
Dobra, widzę, że ktoś ogarnia (@bastard13). Są postępy ;P tylko jedna rzecz w iteratorach mi nie daje spokoju. Skąd next() i current() wiedzą, że ten jest koleny, a ten wiersz jest obencnie potrzebny? Czy to coś w rodzaju pętli? Nie wiem czy się dobrze wyraziełem... ale skąd wiadomo (ja wiem, ale skąd to wie PHP) która zmienna przechowuje tablice by przejścia przez nią?
Ten post edytował spokoloko123 10.05.2012, 07:49:13 -------------------- Pomogłem? Kliknij POMÓGŁ
|
|
|
10.05.2012, 11:29:00
Post
#8
|
|
Grupa: Zarejestrowani Postów: 1 748 Pomógł: 388 Dołączył: 21.08.2009 Skąd: Gdynia Ostrzeżenie: (0%) |
Każda tablica ma wewnętrzny wskaźnik, funkcja mysql_fetch_assoc() pobiera tablicę i przesuwa wskaźnik, dlatego przy następnym wywołaniu pobierze kolejny element, funkcja zwróci FALSE kiedy nie będzie już więcej wyników do zwrócenia
Cytat Returns an associative array that corresponds to the fetched row and moves the internal data pointer ahead -> http://www.php.net/mysql_fetch_assoc
Ten post edytował tehaha 10.05.2012, 11:29:36 |
|
|
10.05.2012, 13:13:47
Post
#9
|
|
Grupa: Zarejestrowani Postów: 114 Pomógł: 12 Dołączył: 15.02.2012 Ostrzeżenie: (0%) |
"normalnie" do zmiennej została by zapisana cała tablica a tu tylko jeden wiersz... do czego to zależy i co to definiuje, że będzie przypisany tylko ten jeden wiersz a nie wszystkie?
-------------------- Pomogłem? Kliknij POMÓGŁ
|
|
|
10.05.2012, 13:48:29
Post
#10
|
|
Grupa: Zarejestrowani Postów: 1 748 Pomógł: 388 Dołączył: 21.08.2009 Skąd: Gdynia Ostrzeżenie: (0%) |
Cytat "normalnie" do zmiennej została by zapisana cała tablica a tu tylko jeden wiersz Normalnie czyli jak? Możesz podać przykład? Nie bardzo rozumiem o co Tobie chodzi. Wysyłasz zapytanie do bazy danych funkcją mysql_query(), która w przypadku zapytania SELECT zwraca zasób . Zasób posiada wskaźnik wewnętrzny, który trzyma wartość "obecnego" rekordu. Funkcja mysql_fetch_array() zwraca jeden rząd z zasobu w postaci tablicy asocjacyjnej i przesuwa wskaźnik wewnętrzny na kolejny rząd w zasobie. To, że następuje tutaj przesunięcie tego wskaźnika wynika z działania funkcji mysql_fetch_array(), która sprawdza wartość wskaźnika, pobiera rząd wyników i przesuwa wskaźnik. Możesz samodzielnie przesuwać ten wskaźnik funkcją mysql_data_seek().Wydaje mi się, że to co Tobie się myli to ten zasób, który przekazujesz do funkcji mysql_fetch_array() - to nie jest to samo co wielowymiarowa tablica, to jest specjalny typ zmiennej. |
|
|
10.05.2012, 13:59:52
Post
#11
|
|
Grupa: Zarejestrowani Postów: 320 Pomógł: 29 Dołączył: 3.04.2010 Ostrzeżenie: (20%) |
W tym wypadku $i jest wskaźnikiem, next() go inkrementuje, rewind() ustawia na 0. key() zwraca klucz danego obiektu, a current() wartosc. |
|
|
10.05.2012, 14:10:31
Post
#12
|
|
Grupa: Zarejestrowani Postów: 114 Pomógł: 12 Dołączył: 15.02.2012 Ostrzeżenie: (0%) |
A ok to dużo wyjaśnia. A da się ten zasób jakoś przypisać (tak z ciekawości)?
Wiem, że Iterator jest głównym interfejsem, który definiuje metody, ale po usunięciu jego implementacji nadal wszystko działa jak należy... więc o co chodzi? Ten post edytował spokoloko123 10.05.2012, 14:47:05 -------------------- Pomogłem? Kliknij POMÓGŁ
|
|
|
10.05.2012, 15:10:01
Post
#13
|
|
Grupa: Zarejestrowani Postów: 320 Pomógł: 29 Dołączył: 3.04.2010 Ostrzeżenie: (20%) |
|
|
|
Wersja Lo-Fi | Aktualny czas: 25.04.2024 - 03:34 |