Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Iterator czy iteratorAggregate - wygoda?
Forum PHP.pl > Forum > PHP > Object-oriented programming
Sephirus
Witam.

Tworzę obiekt, który zawiera tabelę, po której chciałbym aby był iterowany.

  1. class Obiekt
  2. {
  3. private $tabela = array(1,2,3,4,5); // itd...
  4.  
  5. // ... kod klasy...
  6. }


I teraz pytanie - skoro zależy mi jedynie na iteracji w FOREACH to czy zaimplementować w klasie interfejs ITERATOR czy ITERATORAGGREGATE. Ten drugi zajmie o wiele mniej kodu. Wydaje mi się, że rozumiem, że ITERATOR jest idealny jeżeli chcę zrobić "bardziej kreatywne" iterowanie po tej tabeli ale jeśli chcę najzwyklejsze to czy opłaca mi się używać ITERATOR? Dlaczego tak/nie?
-=Peter=-
W tym przypadku najprostszym rozwiązaniem będzie implementacja IteratorAggregate, a w metodzie getIterator tworzenie i zwracanie obiektu ArrayIterator.

  1. class Obiekt implements IteratorAggregate
  2. {
  3. private $tabela = array(1,2,3,4,5); // itd...
  4.  
  5. public function getIterator() { return new ArrayIterator($this->tabela); }
  6. }
Sephirus
Ok - też mi się tak właśnie wydawało, że to jest najprostsze wyjście ale kiedy w takim razie zastosować ITERATOR? smile.gif
-=Peter=-
Np. wtedy gdy w domyśle nie iterujesz po tablicy, tylko wyznaczasz dynamicznie wartości.

Przykładem może być iterowanie po dużych kolekcjach obiektów, której nie chcesz wczytywać na raz do pamięci, gdyż jest to nie wydajne, ale tworzysz na żądanie pojedyncze obiekty w iteratorze, czyli w jednym momencie w pamięci istnieje jeden obiekt który jest zwracany przez iterator. Szczerze powiedziawszy to już dawno temu ostatni raz implementowałem czysty interfejs Iterator, jest wiele dobrych iteratorów w spl (iteratory rekursywne, iteratory iterujące po plikach w systemie plików, iteratory filtrujące, keszujące itp), które wystarczają w większości przypadków
Sephirus
Dzięki smile.gif o to mi właśnie chodziło.
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.