PHP5 adiciona Iterator, um conjunto de interfaces prontas que ajudam a navegar e lidar com estruturas de dados hierárquicas. Este é um dos novos recursos mais interessantes do PHP5.
Esses Iteradores reduzem significativamente o código necessário para processar uma árvore de documentos XML ou uma coleção de arquivos. Um grande número de Iteradores são usados no PHP5, incluindo ArrayIterator, CachingIterator, LimitIterator, RecursiveIterator, SimpleXMLIterator e DirectoryIterator.
DirectoryIterator pode processar arquivos no diretório de forma rápida e eficiente. Com um pouco mais de criatividade no processo de codificação, DirectoryIterator também pode ser usado para processar recursivamente árvores de diretórios aninhadas. Ambas as tarefas podem ser realizadas usando apenas algumas linhas de código, uma melhoria significativa em relação à abordagem "padrão".
Processando um diretório de nível único Primeiro começamos com uma tarefa simples: processar um diretório de nível único. Insira (ou copie) o seguinte código (Listagem A), modificando o caminho do diretório para refletir a configuração local:
Listagem A
<?php$it = new DirectoryIterator("/tmp/mystuff");foreach($it as $file) {if ( !$it->isDot()) {echo $file . "n";}}?>Veja a saída deste código no navegador, você verá uma lista de arquivos no diretório especificado. Como isso aconteceu? DirectoryIterator fornece uma interface predeterminada para reafirmar o conteúdo de um diretório. Uma vez que a localização do diretório de destino é amostrada, ele pode ser tratado como um array PHP padrão, com cada elemento representando um arquivo no diretório. Observe que ele usa o método isDot() para filtrar os diretórios "." e ".." respectivamente.
Manipulando árvores de diretórios aninhadas Manipular uma árvore de diretórios aninhada recursivamente é quase tão fácil. Nesse caso, DirectoryIterator precisa verificar cada objeto que encontra no diretório de nível único para determinar se é um arquivo ou um diretório. Se for um diretório, vá um nível mais fundo para verificar o conteúdo do próximo nível. Isso pode parecer bastante complexo e, no passado, normalmente exigia mais de 15 linhas de código.
No entanto, com PHP5, você só precisa de dois novos Iteradores: RecursiveIterator e RecursiveIteratorIterator, que combinam todos os recursos acima. Veja Lista B:
Lista B
<?php$it = new RecursiveDirectoryIterator("/tmp");foreach(new RecursiveIteratorIterator($it) as $file) {echo $file ;}?>Neste momento, digite. o resultado Todos os arquivos e diretórios no diretório inicial serão listados. Escusado será dizer que esta interface recursiva integrada é muito conveniente se você precisar processar todos os arquivos em um nível de diretório específico - por exemplo, compactando recursivamente uma árvore de diretórios ou modificando as permissões de grupo/proprietário de uma série de arquivos aninhados.
Aplicação na vida real: Imprimindo uma árvore de diretórios Imprimir uma árvore de diretórios gráfica é uma aplicação comum de recursão de diretórios. Usar o Iterator para lidar com essa tarefa é muito simples, porque a documentação da classe Iterator contém uma classe de instância escrita especificamente para este aplicativo. DirectoryTreeIterator (graças a Marcus Boerger) fornece outras melhorias ao RecursiveIteratorIterator discutido anteriormente, em particular tags ASCII que representam profundidade e posição na estrutura da árvore.
A Listagem C ilustra o uso de DirectoryTreeIterator.
Listagem C
<?php$it = new DirectoryTreeIterator("/tmp/cookbook/");foreach($it as $path) {echo $path . "n";}?>Aqui está parte da saída que você vê:
| -ch01| |-receita01| |-exemplo01.php| Para entender melhor o valor desses DirectoryIterators, tente codificar os três aplicativos ilustrados neste tutorial usando funções padrão de arquivo e diretório.