![]() |
![]() |
![]()
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 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Przeczytałeś treść błędu? (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Cytat Fatal error: Cannot redeclare class Iterator Co można przetłumaczyć jako:Cytat Błąd krytyczny: Nie można ponownie zadeklarować klasy Interator Czyli taka klasa/interfejs już istnieje.W książce zapewne podali kod tych klas/interfejsów, abyś wiedział jak one wyglądają. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 8 Pomógł: 0 Dołączył: 16.10.2008 Ostrzeżenie: (0%) ![]() ![]() |
W książce zapewne podali kod tych klas/interfejsów, abyś wiedział jak one wyglądają. Już rozumiem, teraz zakomentowałem interfejsy w klasie Collection, następniezaimplementowałem interfejs IteratorAggegate (wbudowany). Klasa Collection posiada metode publiczną getIterator(), która to zwraca obiekt CollectionIterator, ten swoją drogą implementuje interfejs Iterator (wbudowany). Output ProductCOLLECTION wygląda tak: Kod ProductCollection Object ( [_members:private] => Array ( [1] => Product Object ( [id:private] => 1 [name:private] => name1 [promotion:private] => false [new:private] => true ) [4] => Product Object ( [id:private] => 2 [name:private] => name3 [promotion:private] => true [new:private] => true ) ) [_onload:private] => [_isLoaded:private] => ) Następnie chcąc przeIterować obiekt ProductCollection (dziedziczy po Collection, a wiec z interfejsami też powinno być wszystko OK! [chyba?]), Kod foreach ($objProductCollection as $key => $val) { echo "key/value: [$key -> $val]\n\n"; } i zwraca błąd: Catchable fatal error: Object of class Product could not be converted to string Czy ja w ogóle ide w dobrą stronę? EDIT: Idąc przykładem z http://pl2.php.net/manual/pl/language.oop5.iterations.php (trochę go zmieniłem, przede wszystkim zamiast wartości dodałem obiekty do klasy MyCollection, poprzez metode add(new Product("name")) i wiem, że tu chodzi właśnie o OBIEKTY w Collection. Mam, teraz cos takiego Kod MyCollection Object ( [items:private] => Array ( [0] => Product Object ( [name:private] => nazwa 1 ) [1] => Product Object ( [name:private] => nazwa 2 ) [2] => Product Object ( [name:private] => nazwa 3 ) ) [count:private] => 3 ) Jak mogę to przeITEROWAĆ? Miałobyć łatwo, a nie jest - ah... EDIT: A czy w ogóle jest sens tak to robić? Czy może powinienem użyc GenericObjectCollection ? WALCZE dalej... Ten post edytował guci0 17.10.2008, 13:19:23 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 5.10.2025 - 08:21 |