abril | 2014 | Blog da Idealizza
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 Interactors.
Uma diferença notória, e a que escolhi mostrar inicialmente, é o uso de arrays por interactors. 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 interactor 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:
$meuInteractor = new ArrayInteractor($meuArray); //Converte o array para interactor
$meuInteractor->rewind(); //Vai para o inicio do array
echo $meuInteractor->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.
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á
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 ) {
$file ->getFilename() . '<br>' ;
Com uso da classe LimitInteractor, 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.