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>
<?
class Collection implements ArrayAccess
{
protected array = array();
public function offsetExists(offset) // verifica se existe o elemento cujo índice é offset
{
return isset(this->array[$offset]);
}
public function offsetGet(offset) // retorna o elemento cujo índice é offset
{
return this->array[$offset];
}
public function offsetSet(offset, value) // atribui value ao índice offset
{
if (offset) this->array[$offset] = value;
else this->array = value;
}
public function offsetUnset(offset) // reseta o índice offset
{
unset(this->array[$offset]);
}
}
?></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><?
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];
?></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><?
class Collection implements ArrayAccess, Countable
{
protected array = array();
...
public function count()
{
return count(this->array);
}
}
?></code>
Agora podemos percorrer o vetor em um for:
<code><?
x = new Collection();
x = 1;
x = 2;
x = 4;
x = 8;
for(i=0; i
{
echo x[$i]."\n";
}
?></code>
Bom, vou ficando por aqui. Em breve escreverei um pouco mais sobre a SPL e mostrarei alguns exemplos úteis desse recurso.
Abraços!







