Dev (Back & Front)ARTIGO

Standard PHP Library

A SPL (Standard PHP Library) é uma ferramenta ainda muito pouco conhecida do PHP, e um dos principais motivos para isso é o fato de possuir pouca documentação oficial. Porém, você pode encontrar a especificação completa escondida aqui.

Ela é basicamente um conjunto de classes e interfaces criadas para resolver problemas comuns e prover acesso eficiente a alguns tipos de dados. Como demonstração, irei criar uma classe Collection, que será um conjunto de elementos quaisquer. Esse conjunto poderá ser acessado, a principio, como apenas como um vetor, e mais posteriormente publicarei outros artigos onde o tornarei mais poderoso.

<code>
&lt;?
class Collection implements ArrayAccess
{
   protected array = array();
   
   public function offsetExists(offset) // verifica se existe o elemento cujo índice é offset
   {
      return isset(this-&gt;array[$offset]);
   }

   public function offsetGet(offset) // retorna o elemento cujo índice é offset
   {
      return this-&gt;array[$offset];
   }

   public function offsetSet(offset, value) // atribui value ao índice offset
   {
      if (offset) this-&gt;array[$offset] = value;
      else this-&gt;array = value;
   }

   public function offsetUnset(offset) // reseta o índice offset
   {
      unset(this-&gt;array[$offset]);
   }
}
?&gt;</code>

O “segredo” está na interface ArrayAccess. Ela exige a implementação dos métodos offsetExists(), offsetGet(), offsetSet() e offsetUnset() que podem ser facilmente criados. Dessa forma podemos executar o seguinte código:

<code>&lt;?
x = new Collection();

x[0] = "Olá";
x = "Mundo!";

//echo implode(" ", x); // isso não funciona pois o tipo do objeto x não é um vetor
//echo count(x); // isso também não funciona pois x não é "contavel"
echo x[0]." ".x[1];
?&gt;</code>

Agora precisamos de mais um recurso muito importante: poder contar quantos elementos há nesta Collection, já que não podemos ter acesso externo a propriedade Collection::array. Basta adicionar a interface Countable e adicionar o método count().

<code>&lt;?
class Collection implements ArrayAccess, Countable
{
   protected array = array();

   ...

   public function count()
   {
      return count(this-&gt;array);
   }
}
?&gt;</code>

Agora podemos percorrer o vetor em um for:

<code>&lt;?
x = new Collection();

x = 1;
x = 2;
x = 4;
x = 8;

for(i=0; i
{
   echo x[$i]."\n";
}
?&gt;</code>

Bom, vou ficando por aqui. Em breve escreverei um pouco mais sobre a SPL e mostrarei alguns exemplos úteis desse recurso.

Abraços!

trabalha com internet desde 2001 e é graduado em Ciência da Computação pela UFES. Foi gerente de tecnologia do iMasters por 7 anos e responsável pelo desenvolvimento do Portal iMasters. Fundador da <a href="http://conceptho.com">Conceptho</a>, empresa especializada em serviços web, onde é responsável pelo projeto <a href="https://rockpigeon.com.br">RockPigeon</a>. Palestrante, articulista e consultor sobre infra-estrutura cloud e desenvolvimento web.

Ver perfil