W3docs

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(): SimpleXMLElement

Ele 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 sinalizador dataIsURL, o PHP analisa o texto literal books.xml como XML e lança um erro de análise. Use simplexml_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 XML

Exemplo: 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 XML

Conclusã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.

Prática

Prática
O que SimpleXMLIterator::current() retorna?
O que SimpleXMLIterator::current() retorna?
Was this page helpful?