Palavras-chave: PHP, Iterators, diretórios, percorrer, iterar, SPL
A forma mais comum de se ler o conteúdo de um diretório em PHP é utilizando um laço de repetição WHILE em conjunto com as funções opendir() e readdir(), como no exemplo a seguir:
<?php
$dir = opendir('/tmp');
while ($arquivo = readdir($dir))
{
echo "$arquivo<br>\\n";
}
closedir($dir);
?>
O uso da função readdir() é simples, permite iterar por todos os arquivos de um diretório. Quando a leitura do diretório acabar, a função retorna FALSE, caindo fora do loop. Porém, se existir algum arquivo com o nome “0”, a função retornará vazio, e a comparação também abortará o loop. A solução é simples, basta uma comparação absoluta com o valor FALSE:
while (($arquivo = readdir($dir)) !== FALSE)
Apesar de simples, estes testes são suscetíveis ao esquecimento do programador. Felizmente o PHP5 introduz iterators, que são uma forma bem mais elegante de se percorrer cadeias de informações. Existem iterators para bancos de dados, XML e sistema de arquivos, é claro. O exemplo anterior, reescrito utilizando iterators, ficaria assim:
<?php
foreach (new DirectoryIterator('/tmp') as $arquivo)
{
echo "$arquivo<br>\\n";
}
?>
O Iterator DirectoryIterator existe para se percorrer o sistema de arquivos e ele tem vários recursos adicionais, como filtros (FilterIterator), que permite exibir somente os resultados que satisfaçam o filtro.
O iterator é implementado sob a forma de uma classe que segue uma interface rígida. Podemos criar iterators para várias tarefas. Os iterators são parte do PHP5 e são providos pela extensão SPL (Standard PHP Library).





Oi Pablo. Desde quando comecei a ler sobre PHP5, achei a SPL e os Iteradores de PHP5 uma ótima (mas um tanto quanto silenciosa) novidade.
teste