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