Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [OOP] Iterowanie / interface Traversable
guci0
post
Post #1





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 16.10.2008

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


Witam serdecznie!

Panowie lub Panie,
mam ogromna prośbe - siędzie nad tym już kilka ładnych godzin i zaraz będe
zmuszony poszukać młotka i dać sobie w głowę ...

Mam takie KLASY i INTERFEJSY:

Kod
interface Traversable {}

interface Iterator implements Traversable {
 function current();
 function key();
 function next();
 function rewind();
 function valid();
}

interface IteratorAggregate implements Traversable {
 public function getIterator();
}


i ...

Kod
class Collection implements IteratorAggregate {
...
public function getIterator() {
       $this->_checkCallback();
     return new CollectionIterator(clone $this);
   }
...
}

class CollectionIterator implements Iterator {

   private $_collection;
   private $_currIndex = 0;
   private $_keys;

   function __construct(Collection $objCol) {
      $this->_collection = $objCol;
      $this->_keys = $this->_collection->keys();
   }

   function rewind() {
      $this->_currIndex = 0;
   }

   function valid() {
      return $this->_currIndex < $this->_collection->length();
   }

   function key() {
      return $this->_keys[$this->_currIndex];
   }

   function current() {
      return $this->_collection->getItem($this->_keys[$this->_currIndex]);
   }

   function next() {
      $this->_currIndex++;
   }
}


Oczywiście nie wkleiłem całego kodu klasy Collection, sądzę iż nie
ma teraz takiej potrzeby. Przykład i implementacja klas/interfejsów biorę z ksiązki PHP5. Zaawansowane programowanie. Wiem, książka
ma sporo błędów i głównie właśnie jakieś psikusy zrobione są z interfejsami, choć w tym przypadku mogę się mylić...

Potrzebuje pomocy, wywolując program
APACHE zwraca:

Parse error: syntax error, unexpected T_IMPLEMENTS, expecting '{' in /Applications/MAMP/htdocs/folder/test/folder_base/class/class.Collection.php on line 8

Już nie wiem jak mam sobie z tym poradzić, dlatego
jeszcze raz proszę o POMOC!

Z góry BARDZO dziękuje
wszystkim zaangażowanym w rozwiązaniu problemu

Pozdrawiam

Paweł - guci0

P.S. Tak na marginesie to, coś słabo działa
edytor na forum (BBCODE)

Ten post edytował guci0 16.10.2008, 21:01:22
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
starach
post
Post #2





Grupa: Zarejestrowani
Postów: 999
Pomógł: 30
Dołączył: 14.01.2007
Skąd: wiesz ?

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


Pozwólcie że ze swoim pytaniem dokleję się tutaj.

Po jakiego diabła ten interfejs, do czego on służy, po co on jest?

Cytat
Interface to detect a class is traversable using foreach.
Wszyyyyystkoooo jaaasneee...

I nadal nie rozumiem po co on jest. Wszystkie kolekcje działają mi z zaimplementowanym tylko interfejsem Iterator.
Go to the top of the page
+Quote Post
mike
post
Post #3





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


~orglee to masz za jakiś tandetny słownik.
Zerknij tu: Traversable
Zresztą wywaliłem z Twojego posta fragmety słownika. Nie wiem po kiego wała je wkleiłeś. Zajmowały sporo miejsca, robiły śmietnik a jak sam zauważyłeś nic nie wnoszą i nie tłumaczą.

Cytat(orglee @ 18.10.2008, 16:29:25 ) *
Po jakiego diabła ten interfejs, do czego on służy, po co on jest?
Czasami stosuje się puste interfejsy. W Javie mówi się na nie Marker Interface. Interfejsy takie nie nakazują implementacji czegokolwiek (bo niby co miałyby nakazywać skoro są puste) tylko oznaczają coś. Dobrym przykładem jest Clonable, interfejs nie wprowadza konieczności implementowania czegokolwiek tylko wskazuje na klasy, których obiekty mogą być klonowane.
Takim właśnie interfejsem jest Traversable. Oznacza on obiekty klas, które pozwalają na przechodzenie po sobie za pomocą pętli.
Cytat(orglee @ 18.10.2008, 16:29:25 ) *
Wszystkie kolekcje działają mi z zaimplementowanym tylko interfejsem Iterator.
Działa Ci bo Iterator dziedziczy po Traversable.
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 16.10.2025 - 08:23