SPL no PHP – Interactor parte 1

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 Interactors.

Arrays

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.

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 ) {
$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.

Referência

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

 

Deixe uma resposta

O seu endereço de email não será publicado Campos obrigatórios são marcados *

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">