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