maio
24

Usando SPL no PHP – Iteractor

posted on maio 24th 2014 in PHP with 0 Comments

Introdução

O Standard PHP Library (SPL) é um coleção de funções, classes e interfaces. Algumas dessas coleções estão disponíveis desde a versão 5.1 do PHP porém, infelizmente, nem todos os profissionais conhecem ou adotam no seu dia-a-dia, principalmente quem gosta de trabalhar mais com arrays do que com objetos, esse é justamente o foco maior desse arquivo. O SPL tem como objetivo prover que desenvolvedores usem ao máximo o poder da orientação a objetos no PHP, vamos ver isso dois exemplos de Iteractors.

Arraysit

Uma diferença notória, e a que escolhi mostrar inicialmente, é o uso de arrays por iteractors. Quando se está trabalhando com bastante informações, a leitura de um array pode chegar a demorar, o que em um sistema não é nada agradável, diferente do array que lê todo o dado, o iteractor lê apenas a o dado solicitado. Isso nos proporciona um ganho de memória considerável a depender do tamanho dos dados. Vamos a um exemplo.

Eu tenho um array com 1000 posições, e preciso trazer apenas a primeira delas, eu poderia fazer muito bem com diversos desenvolvedores fazer e usar:

echo $meuArray[0];

Ao invés de trazer todo o array, e escrever apenas a primeira posição como feito acima, eu posso trazer direto apenas a primeira posição, os demais dados não estarão ocupado memória até que eu chame-os:

$meuIteractor = new ArrayIteractor($meuArray); //Converte o array para iteractor
$meuIteractor->rewind(); //Vai para o inicio do array
echo $meuIteractor->current(); //Retorna a posição atual do array

Esse é apenas um simples exemplo, mas claro, podemos pensar em diversos outras formas de uso a depender de nosso cenário.

Diretórios e arquivos

Podemos também saber de forma simples, sem fugir da orientação a objetos, informações de arquivos ou diretórios como mostrado no código abaixo:

$dir =  new DirectoryIterator(__DIR__); //__DIR__ retorna o diretório que o arquivo está
foreach ( $dir as $file ) {
echo $file ->getFilename() . ‘<br>’; //Retorna o nome do arquivo corrente
}

Já que estamos falando de arquivos, vamos dizer que eu quero pegar apenas os arquivos 2, 3, 4, 5 e 6 diretório atual, ou seja, começando do 2, desejo os próximos 5 arquivos:

$dir =  new DirectoryIterator(__DIR__);
foreach ( new LimitIterator( $path , 2, 5)  as $file ) {
echo $file ->getFilename() . ‘<br>’ ;
}

Com uso da classe LimitIteractor, podemos filtrar o resultado, lembrando que ele não trás tudo e exibe apenas o solicitado, mas sim, trás apenas o solicitado e com isso temos um economia de memória.

Referência

http://php.net/manual/en/book.spl.php
http://php.net/manual/en/language.constants.predefined.php

We would love to hear your comments