Frage

Ich versuche, ein großes, altes Projekt, Refactoring und eine Sache, die ich bemerkt habe, ist eine Reihe von verschiedenen Iterator-Implementierungen:

while($iterator->moveNext()) {
    $item = $iterator->current();
    // do something with $item;
}   

for($iterator = getIterator(), $iterator->HasNext()) {
    $item = $iterator->Next();
    // do something with $item
}   

while($item = $iterator->fetch()) {
    // do something with item
}   

oder auch die StandardPHPLibrary (SPL) Iterator, die erlaubt

foreach($iterator as $item) {
    // do something with $item
}   

Mit so viele verschiedenen Iteratoren (mit verschiedenen Methoden für über Sammlungen Looping) scheint wie ein starker Code Geruch, und ich bin geneigt, alles zu SPL Refactoring. Gibt es einen entscheidenden Vorteil zu jedem dieser Implementierungen von Iterator, oder ist es lediglich eine Frage des persönlichen Geschmacks?

War es hilfreich?

Lösung

Die SPL-Version ist definitiv der Weg zu gehen. Nicht nur ist es am einfachsten zu lesen, aber es ist ein Teil von PHP jetzt, so wird viel mehr Menschen vertraut sein.

Es gibt nichts „falsch“ mit den anderen, aber wie Sie sagten, alle mit diesen unterschiedlichen Versionen in einem Projekt nicht jemand helfen.

Andere Tipps

Imo, einfach eine Verwendung oder mehrere der SPL-Bibliotheken als eine Schnittstelle am vorderen Ende im Gebrauch weniger hässlich zu sein tendiert. Allerdings kann der Träger hinter der Umsetzung ein bisschen hässlich.

Zum Beispiel schrieb ich einen Iterator, die effizient eine Datenbank Ergebnismenge durchlaufen, so dass die Ergebnisse, die nie nie von der Anforderungszeiger abgerufen wurden angefordert wurden, und wenn Einzelteile waren vorzeitig geholt (IE: $ obj [5]), es versuchen würde, alle erforderlichen Ergebnisse in einem internen Puffer.

wunderbar funktioniert, müssen Sie nur diesen Code beten, dass die Magie nie hinter den Kulissen macht fehlschlägt, weil es die Menschen verwirrt, wenn sie sehen Sie etwas verwenden, das wie ein Array aussieht, und es bedeutet „Magie“, die fehlschlagen:)

Magie bekam Menschen auf dem Scheiterhaufen. verwenden Sie es so sorgfältig und klug, vielleicht macht es offensichtlich, wie es funktioniert.

Meine persönliche Präferenz ist für die

for( $object as $i => $v ) 

Notation für sie ist in der Regel konsistente und vorhersagbare.

for( $dbresult->iterator() as $i => $v ){ 

}

Stil-Notation ist funktional identisch, aber zumindest haben Sie weniger Rätselraten, wie es auf der Oberfläche funktioniert.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top