![]() |
|
|||||||
| Registrieren | Benutzerliste | Interessengemeinschaften | Suchen | Heutige Beiträge | Alle Foren als gelesen markieren | ||
| Java Link Base | Wiki | NoPaste | Chat | Boardregeln | F.A.Q. |
| Scriptsprachen PHP/Python/Perl usw. |
![]() |
|
|
Themen-Optionen | Thema durchsuchen |
|
|
#1 |
|
Registriert seit: 09.05.2009
Beiträge: 6
|
Hallo!
Ich habe gestern (wieder) angefangen, mir ein paar (nie da gewesene und längst vergessene) PHP5-kenntnisse anzueignen, hab erstmal eine einfach verkettete Liste geschrieben, diese funktioniert auch, wo ich aber nicht vorankomme: wie mache ich so etwas zu einem IterableAggregate? Wohin mit der Iterator-Klasse? Instanzen der Iterator Klasse müssen ja irgendwie auf die "Innereien" der LinkedList-Klasse zugreifen (etwa auf "head" beim rewind). - nested classes gibt es nicht, ansonsten könnte man Iterator als geschachtelte Klasse in LinkedList implementieren - anonyme inner classes (wäre mein instrument der wahl in java gewesen) gibt es nicht - "package-sichtbarkeit" oder "datei-sichtbarkeit" gibt es nicht (ansonsten könnte ich die "innereien" datei-sichtbar deklarieren, und mich damit begnügen) - so etwas wie friend-klassen aus C++ gibt es anscheinend auch nicht - einfach alles public deklarieren? Wozu der Zirkus dann überhaupt? mir sind leider irgendwie die ideen ausgegangen, ich wüsste nicht mal, wonach ich googlen soll? Hab mal in der Implementierung von SplDoublyLinkedList nachgeschaut: es implementiert nur Iterator[nix Aggregate!]? Heißt es dann, dass man über eine Liste mit zwei Iteratoren gleichzeitig nicht mal lesend laufen kann? Danke im Voraus. PS: hab eben rausgefunden, dass PHP auch keine Threads unterstützt... omg^^ ó_Ò?
__________________
aka Andrey |
|
|
|
|
|
#2 |
|
Moderator
|
Also das Interface IteratorAggregate ist erstmal dazu da einem Typen die Fähigkeit zu verleihen das man diesen iterieren kann, d.h. es ermöglicht das man ein Objekt dieses Typs wie ein Array in foreach verwenden kann. Dabei spielt es noch keine Rolle welcher Typ von Iterator diesen Typ unterstützt.
Jetzt kommen wir zum Iterator selbst: Das Interface Iterator kann man implementieren um einen Iterator zu erstellen. Jetzt ist es Deine freie Entscheidung ob Du jetzt eine eigene Klasse als Iterator implementierst. Genauso könntest Du die Klasse die Du iterieren möchtest selbst das Iterator Interface implementieren lassen. Eine Klasse gegen beide Interfaces zu implementieren wäre redundant und unsinnig. Denn wenn Du bereits das Iterator Interface implementierst brauchs Du nicht noch zusätzlich ein Aggregate dafür. Bsp: PHP Code:
PHP Code:
Da Du Dir jetzt noch Gedanken zur Sichtbarkeit der Listelemente gemacht hast wäre es in Deinem Falle am besten das Iterator Interface direkt in Deine Liste zu implementieren, genau so wie es die SPL macht. Wenn nicht wäre es eine Aufgabe für Dich Dir Gedanken zu machen wie Du Deine Listenknoten dem Iterator sichtbar machst (sinnvolle getter/setter etc.). Gut Schuß VuuRWerK ![]()
__________________
"C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do it blows your whole leg off." - Bjarne Stroustrup "make the impossible possible, the possible easy, and the easy elegant." (Moshé Feldenkrais) |
|
|
|
|
|
#3 | ||
|
Registriert seit: 09.05.2009
Beiträge: 6
|
Zitat:
IteratorAggregate kann bei jeder getIterator-anfrage einen _neuen_ iterator liefern, insbesondere kann eine datenstruktur von mehreren unabhängigen iteratoren durchlaufen werden. Zitat:
Angesichts der tatsache, dass man mit php eh nicht multithreaden kann, gebe ich mich also mit direkten Implementierung von Iterator (nach Vorbild der SPL) zufrieden: Beispiele, wo man mehrere Iteratoren gleichzeitig braucht, sind eh ein wenig konstruiert... Also, es gibt natürlich ein paar wichtige algorithmen, wo man das gut gebrauchen kann, aber es macht wenig bis gar keinen sinn, diese in php zu implementieren. Daher bin ich auch mit dem wenigen zufrieden, was die Mächtigkeit von PHP so hergibt. Danke.
__________________
aka Andrey |
||
|
|
|
|
|
#4 | |||
|
Moderator
|
Hab ich nie behauptet sondern ich bin nur oberflächlich geblieben um Dich eigentlich nicht noch mehr zu verwirren.
Zitat:
![]() Zitat:
Zitat:
Also wie gesagt, Iterator Interface direkt implementieren und damit leben, dass wenn man mit PHP arbeitet an einigen Ecken immernoch dazu gezwungen ist "unsauberen" Code zu produzieren. Schau Dir die API von PHP an da weißt Du vorher es kommt ![]() Gut Schuß VuuRWerK ![]()
__________________
"C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do it blows your whole leg off." - Bjarne Stroustrup "make the impossible possible, the possible easy, and the easy elegant." (Moshé Feldenkrais) |
|||
|
|
|
![]() |
| Lesezeichen |
| Stichworte |
| - |
| Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
| Themen-Optionen | Thema durchsuchen |
|
|
Ähnliche Themen
|
||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| [Erledigt] Spring + Hibernate = Keine JDBC Verbindung | EagleEye | APIs & Frameworks (neu) | 1 | 13.03.2009 22:07 |
| Oberlandesgericht Frankfurt: Keine Haftung für offene WLANS | Revenant | Sicherheit | 0 | 08.07.2008 18:42 |
| Warum gibt es in Java keine Operatorüberladung? | VuuRWerK | Java Standard Edition (J2SE) | 3 | 23.11.2007 15:49 |
| Aptana macht keine Einzüge oO | christoph | IDEs & Tools | 5 | 11.10.2006 19:12 |
| Keine Lust zum Lernen | PaNic | Spielwiese | 34 | 31.07.2006 09:18 |