php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger

PHP Einsteiger PHP Problemlösungen für Spracheinsteiger
Archive: 2004, 2004/2, 2005, 2005/2, 2006, 2007, 2008, 2009, 2010,

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 11.01.2012, 13:35  
Erfahrener Benutzer
 
Benutzerbild von fireweasel
 
Registriert seit: 20.03.2010
Beiträge: 474
PHP-Kenntnisse:
Fortgeschritten
fireweasel ist ein Lichtblickfireweasel ist ein Lichtblickfireweasel ist ein Lichtblickfireweasel ist ein Lichtblickfireweasel ist ein Lichtblick
fireweasel eine Nachricht über ICQ schicken fireweasel eine Nachricht über AIM schicken fireweasel eine Nachricht über Yahoo! schicken fireweasel eine Nachricht über Skype™ schicken
Standard

@Koala|@tr0y:
Zitat:
Zitat von tr0y Beitrag anzeigen
Weil ich es für so wichtig erachtet habe das ich die beiden ( nur existierenden ) Möglichkeiten dort mit angab.
Genau, schließlich fragte der OP nach der "Anwendung" und da ist es schon erwähnenswert, dass es diese beiden doch sehr unterschiedlichen Arten von Datenquellen gibt, "über die man iterieren" kann.

Ich wüsste jetzt auch nicht, wie man das allgemeinverständlich ausdrückt, ohne dass spitzfindige Geister auf die Idee kommen, die zwei Teilmengen in einen Topf zu schmeißen.

Zitat:
@fireweasel: Wenn mans genau nimmt gibs in PHP nur foreach() das Iteratoren nutzt, mal abgesehen von den Iteratoren der SPL die Iteratoren im Constructor voraussetzen.
Es gibt da noch iterator_apply() in der SPL. Nur erschließt sich mir der Nutzen dieser Funktion nicht so richtig. Das kann aber auch an den dürftigen Handbuchangaben dazu liegen ...

Zitat:
Naja, zumindest „zu Fuß“ kann ich einen Iterator natürlich auch benutzen. Da fehlt dann nur die Magie, die durch die Ableitung von SPL entsteht.
Ja, das ist halt die (PHP-spezifische) Anwendung eines Iterator-Patterns mit expliziter Stop-Funktion und der (unnötigen) expliziten Weiterschaltung durch ->next(). Es entspricht übrigens diesem Muster:

PHP-Code:
while (feof($foo) {
    echo 
fgets($foo); // oder fread();
    // weiterschalten nicht noetig

Es wäre nett, wenn man Dateien (und all die anderen Nicht-SPL- und nicht Iterator-Interface-Iteratoren) mit den gleichen Funktionen|Methoden abfragen könnte. Da kommen bestimmt in PHP 5.5.x noch extra FileReadLineIterator, FileReadRecordIterator, PDOStatementIterator usw. hinzu.

Und da man PHP-Iteratoren explizit zurücksetzen (oder starten) sollte (sagt zumindest das Interface), wäre eine for-Schleife eventuell geeigneter. Immerhin hat sie extra "Slots" für fast jede Iterator-Methode "eingebaut":

PHP-Code:
for ($it->rewind(); $it->valid(); $it->next()) {
    
// who needs ->key() anyway? ;)
    
echo $it->current();

--

Problematisch bei der foreach()-Integration des Iterator-Interfaces ist übrigens noch, dass sie für assoziative Arrays (oder deren Simulation) ausgelegt ist. Gewöhnliche PHP-Arrays oder Objekte liefern bei jedem Schleifendurchlauf einen eindeutigen (unterschiedlichen) Key. Ein Iterator-Objekt muss das nicht tun. Das kann zu Problemen führen, wenn der Aufrufer der foreach-Schleife davon ausgeht, dass sich ein Iterator genauso verhält wie Arrays oder gewöhnliche Objekte:

PHP-Code:
class YetAnotherIterator implements Iterator {
    
// ...
    
function key() { // "returns" null
    
}
    
// ...
}
$iterable = new YetAnotherIterator();

$collect_them = array ();
foreach (
$iterable as $key => $value) {
    
$collect_them[$key] = $value;
}
// array with only 1 entry; key === ''
var_dump($collect_them); 
--
*update*
(Da ich meine anderen Posts nicht mehr editieren darf, schreib ich's hier rein)

Die SPL hat einen "Datei-Iterator" (und das schon ziemlich lange): das SPLFileObject. Das kann zwar keine Datensätze ("records") lesen, dafür aber über Zeilen und CSV-kodierte-Datensätze iterieren. Es kann sogar die Zeilen zählen, wenn man nicht zwischendrin oder vorher den Dateizeiger mit ->fseek() oder ->seek() setzt. Sehr speziell und nicht wirklich schön im Handling (allein die sich teilweise überschneidenden Funktionen), aber ein Anfang.

Geändert von fireweasel (15.01.2012 um 11:29 Uhr). Grund: SPLFileObject
fireweasel ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 11.01.2012, 13:37  
Erfahrener Benutzer
 
Benutzerbild von fireweasel
 
Registriert seit: 20.03.2010
Beiträge: 474
PHP-Kenntnisse:
Fortgeschritten
fireweasel ist ein Lichtblickfireweasel ist ein Lichtblickfireweasel ist ein Lichtblickfireweasel ist ein Lichtblickfireweasel ist ein Lichtblick
fireweasel eine Nachricht über ICQ schicken fireweasel eine Nachricht über AIM schicken fireweasel eine Nachricht über Yahoo! schicken fireweasel eine Nachricht über Skype™ schicken
Standard

(Doppelpost. Wieso auch immer. )

Geändert von fireweasel (15.01.2012 um 11:19 Uhr).
fireweasel ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Facebook - Anwendung - Session Problem!? Ralf-2011 PHP Einsteiger 16 30.12.2011 08:11
[Erledigt] Pfade für Anwendung definieren chunky PHP Einsteiger 7 09.05.2011 17:49
Ajax Anwendung, reines Ajax oder Ajax und Html jackie1983 JavaScript, Ajax und mehr 5 09.02.2010 16:50
Fragen bzgl. Architektur meiner Anwendung TheNerd Software-Design 4 25.01.2010 17:21
Anwendung für mehrere Server entwickeln smilla Software-Design 14 30.12.2009 00:05
PhpOpenTracker und PHP5 Anwendung phpbeginner PHP Tipps 2008 3 19.03.2008 14:07
lokalisieren einer Anwendung fuhrmara PHP-Fortgeschrittene 1 22.04.2007 18:41
PHP Anwendung auf CD ... andrew22 PHP Tipps 2006 22 03.08.2006 17:07
Undo/Oder Operatoren und Ihre Anwendung Off-Topic Diskussionen 3 02.08.2006 14:14
php als anwendung notyyy PHP Tipps 2006 15 28.05.2006 02:38
diverse Design-Fragen eines Frameworks mepeisen PHP-Fortgeschrittene 10 26.04.2006 01:57
Frage zur Anwendung einer Session mehrfach... GELight PHP Tipps 2006 10 12.03.2006 16:47
Suche BREAD Anwendung Bruno Beitragsarchiv 3 30.06.2005 15:20
[Erledigt] PHP Anwendung im Browser PHP-Fortgeschrittene 13 30.05.2005 19:32
[Erledigt] Anwendung per PHP steuern PHP-Fortgeschrittene 1 26.09.2004 18:03

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
spl iterator simulate associative array, zählenwenn pattern, php iterator interface fast, interface iterator php wie anwenden?

Alle Zeitangaben in WEZ +2. Es ist jetzt 19:47 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum