W3docs

current()

SimpleXML ist eine PHP-Erweiterung für die Arbeit mit XML-Dokumenten. Die Methode SimpleXMLIterator::current() gibt das aktuelle Element zurück.

Einführung

SimpleXML ist eine PHP-Erweiterung, die eine einfache und benutzerfreundliche API für die Arbeit mit XML-Dokumenten bereitstellt. Die Methode SimpleXMLIterator::current() ist eine der Iterator-Methoden der Klasse SimpleXMLIterator. Sie gibt das aktuelle SimpleXMLElement-Objekt während der Iteration zurück. In diesem Artikel wird erläutert, wie diese Methode in PHP verwendet wird.

Syntax

Die Methode SimpleXMLIterator::current() gibt das Element zurück, auf das der interne Zeiger des Iterators zeigt. Ihre Signatur lautet:

public SimpleXMLIterator::current(): SimpleXMLElement

Sie nimmt keine Parameter entgegen und gibt das SimpleXMLElement zurück (genauer gesagt einen SimpleXMLIterator, der SimpleXMLElement erweitert), auf dem der Zeiger aktuell steht. Befindet sich der Zeiger hinter dem Ende der Sammlung, gibt die Methode null zurück. Deshalb wird current() normalerweise zusammen mit valid() verwendet.

current() ist eine der fünf Methoden, die das Iterator-Interface von PHP implementieren, neben rewind(), valid(), next() und key().

Verhalten von current() in einer foreach-Schleife

PHPs foreach steuert einen Iterator automatisch: Am Anfang jedes Durchlaufs ruft es rewind() auf (einmal), dann valid(), dann current(), um die Schleifenvariable zu befüllen, und schließlich next(), um den Zeiger voranzurücken. Wenn Sie current() innerhalb eines foreach-Schleifenrumpfs aufrufen, erhalten Sie daher dasselbe Element wie die Schleifenvariable – nicht das nächste.

Das bedeutet, dass current() am nützlichsten ist, wenn Sie den Zeiger manuell mit einer while-Schleife steuern oder wenn Sie nur das erste Element nach einem rewind() benötigen.

Laden des XML

Bevor Sie iterieren können, benötigen Sie einen SimpleXMLIterator. Es gibt zwei gängige Möglichkeiten, einen zu erstellen:

<?php
// 1. From an XML string (the default — the first argument IS the XML data):
$data = '<books><book><title>PHP Basics</title></book></books>';
$books = new SimpleXMLIterator($data);

// 2. From a file — you MUST pass the third argument `true` (dataIsURL),
//    otherwise the constructor treats the string as raw XML and fails:
$books = new SimpleXMLIterator('books.xml', 0, true);

Ein häufiger Fehler ist das Schreiben von new SimpleXMLIterator('books.xml') in der Erwartung, dass die Datei gelesen wird. Ohne das Flag dataIsURL parst PHP den literalen Text books.xml als XML und wirft einen Parser-Fehler. Verwenden Sie simplexml_load_file(), wenn Sie eine funktionsorientierte API bevorzugen.

Beispiel: manuelle Iteration mit current()

Dieses in sich geschlossene Beispiel erstellt den Iterator aus einem string und durchläuft ihn mit rewind(), valid(), current() und next(), sodass Sie genau sehen können, worauf current() zeigt:

<?php
$data = <<<XML
<books>
  <book><title>PHP Basics</title></book>
  <book><title>Advanced XML</title></book>
</books>
XML;

$books = new SimpleXMLIterator($data);

$books->rewind();              // move pointer to the first <book>
while ($books->valid()) {      // stop when current() would be null
    $current = $books->current();
    echo $current->title . "\n";
    $books->next();            // advance the pointer
}

Ausgabe:

PHP Basics
Advanced XML

Beispiel: current() in einer foreach-Schleife

Zum Vergleich dieselben Daten mit einer foreach-Schleife. Hier enthält $book bereits das aktuelle Element, daher ist ein separater Aufruf von current() überflüssig:

<?php
$data = '<books>'
      . '<book><title>PHP Basics</title></book>'
      . '<book><title>Advanced XML</title></book>'
      . '</books>';

$books = new SimpleXMLIterator($data);

foreach ($books as $book) {
    // $book === $books->current() at this point in the loop
    echo $book->title . "\n";
}

Ausgabe:

PHP Basics
Advanced XML

Fazit

Die Methode SimpleXMLIterator::current() gibt das Element zurück, auf das der interne Zeiger des Iterators zeigt, und ist ein fester Bestandteil des Iterator-Interfaces von PHP, das ein konsistentes Durchlaufverhalten für XML-Daten gewährleistet. Beachten Sie, dass foreach bei jedem Durchlauf current() für Sie aufruft – innerhalb eines Schleifenrumpfs gibt die Methode daher das aktuelle Element zurück, nicht das nächste. Für präzise Steuerung sollten Sie den Zeiger selbst mit rewind(), valid() und next() bewegen und die Positionsbezeichnung mit key() lesen. Mehr über das Parsen von XML erfahren Sie unter PHP SimpleXML und dem SimpleXML-Parser.

Übungen

Übung
Was gibt SimpleXMLIterator::current() zurück?
Was gibt SimpleXMLIterator::current() zurück?
Was this page helpful?