current()
SimpleXML é uma extensão PHP que fornece uma API simples para trabalhar com documentos XML. SimpleXMLElement::current() é um dos métodos do iterador.
Introdução
SimpleXML é uma extensão PHP que fornece uma API simples e fácil de usar para trabalhar com documentos XML. O método SimpleXMLIterator::current() é um dos métodos do iterador fornecidos pela classe SimpleXMLIterator. Ele retorna o objeto SimpleXMLElement atual durante a iteração. Neste artigo, discutiremos como usar esse método em PHP.
Sintaxe
O método SimpleXMLIterator::current() retorna o elemento no ponteiro interno do iterador. Sua assinatura é:
public SimpleXMLIterator::current(): SimpleXMLElementEle não aceita nenhum parâmetro e retorna o SimpleXMLElement (mais precisamente, um SimpleXMLIterator, que estende SimpleXMLElement) no qual o ponteiro está posicionado atualmente. Se o ponteiro ultrapassar o final da coleção, retorna null, e é por isso que current() normalmente é usado em conjunto com valid() antes de ser chamado.
current() é um dos cinco métodos que implementam a interface Iterator do PHP, juntamente com rewind(), valid(), next() e key().
Como current() se comporta dentro de um loop foreach
O foreach do PHP conduz um iterador automaticamente: no início de cada passagem, ele chama rewind() (uma vez), depois valid(), depois current() para preencher a variável do loop e, por fim, next() para avançar o ponteiro. Portanto, ao chamar current() dentro do corpo de um foreach, você obtém o mesmo elemento que a variável do loop — não o próximo.
Isso significa que current() é mais útil quando você controla o ponteiro manualmente com um loop while, ou quando precisa apenas do primeiro elemento após um rewind().
Carregando o XML
Antes de iterar, você precisa de um SimpleXMLIterator. Há duas maneiras comuns de criar um:
<?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);Um erro frequente é escrever
new SimpleXMLIterator('books.xml')esperando que ele leia o arquivo. Sem o sinalizadordataIsURL, o PHP analisa o texto literalbooks.xmlcomo XML e lança um erro de análise. Usesimplexml_load_file()se preferir uma API no estilo de função.
Exemplo: iteração manual com current()
Este exemplo independente cria o iterador a partir de uma string e o percorre com rewind(), valid(), current() e next() para que você possa ver exatamente onde current() aponta:
<?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
}Saída:
PHP Basics
Advanced XMLExemplo: current() dentro de foreach
Para comparação, os mesmos dados com um loop foreach. Aqui $book já contém o elemento atual, portanto uma chamada separada a current() é redundante:
<?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";
}Saída:
PHP Basics
Advanced XMLConclusão
O método SimpleXMLIterator::current() retorna o elemento no ponteiro interno do iterador e é uma parte padrão da interface Iterator do PHP, proporcionando um comportamento de travessia consistente em dados XML. Lembre-se de que o foreach chama current() por você a cada passagem, portanto, dentro do corpo de um loop, ele retorna o elemento atual em vez do próximo. Para controle preciso, mova o ponteiro você mesmo com rewind(), valid() e next(), e leia o rótulo de posição com key(). Para saber mais sobre análise de XML, consulte PHP SimpleXML e o analisador SimpleXML.