Andre Metzen


Standard PHP Library

Publicado em php por Andre Metzen, 18 de October de 2007

A SPL (Standard PHP Library) é uma ferramenta ainda muito pouco conhecida do PHP. Um dos principais motivos disso é 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.

PHP:
  1. <?
  2.  
  3. class Collection implements ArrayAccess
  4. {
  5.     protected $array = array();
  6.  
  7.     public function offsetExists($offset) // verifica se existe o elemento cujo indice é $offset
  8.     {
  9.         return isset($this->array[$offset]);
  10.     }
  11.    
  12.     public function offsetGet($offset) // retorna o elemento cujo indice é $offset
  13.     {
  14.         return $this->array[$offset];
  15.     }
  16.    
  17.     public function offsetSet($offset, $value) // atribui $value ao indice $offset
  18.     {
  19.         if ($offset)  $this->array[$offset] = $value;
  20.         else  $this->array[] = $value;
  21.     }
  22.    
  23.     public function offsetUnset($offset) // reseta o indice $offset
  24.     {
  25.         unset($this->array[$offset]);
  26.     }
  27. }
  28.  
  29. ?>

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:

PHP:
  1. <?
  2.  
  3. $x = new Collection();
  4.  
  5. $x[0] = "Olá";
  6. $x[] = "Mundo!";
  7.  
  8. //echo implode(" ", $x); // isso não funciona pois o tipo do objeto $x não é um vetor
  9. //echo count($x); // isso também não funciona pois $x não é "contavel"
  10. echo $x[0]." ".$x[1];
  11.  
  12. ?>

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().

PHP:
  1. <?
  2.  
  3. class Collection implements ArrayAccess, Countable
  4. {
  5.     protected $array = array();
  6.  
  7.     ...
  8.  
  9.     public function count()
  10.     {
  11.         return count($this->array);
  12.     }
  13. }
  14.  
  15. ?>

Agora podemos percorrer o vetor em um for:

PHP:
  1. <?
  2.  
  3. $x = new Collection();
  4.  
  5. $x[] = 1;
  6. $x[] = 2;
  7. $x[] = 4;
  8. $x[] = 8;
  9.  
  10. for($i=0; $i<count($x); $i++) // agora funciona!
  11. {
  12.     echo $x[$i]."\n";
  13. }
  14.  
  15. ?>

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

Abraços!

2 respostas para 'Standard PHP Library'

Subscreva os comentários por RSS ou TrackBack para 'Standard PHP Library'.


  1. em 18 de October de 2007 às 10:41 am

    […] André Metzen publicou um texto bacana sobre a Standard PHP Library, que é um conjunto de classes e interfaces do PHP 5, criadas pra solucionar alguns problemas nossos […]

  2. Padilha disse,

    em 19 de February de 2008 às 10:06 am

    Muito bom cara!

    Sempre tive dificuldade para ver na prática o ArrayAccess, como ele funciona.
    E com esse pequeno artigo, ficou tudo muito claro.

    Valew. Estou aguardando o próximo Artigo

Deixe uma réplica

Subscribe without commenting