Manipulando arrays com SPL e ArrayObject
Neste artigo iremos estudar algumas vantagens em se utilizar a biblioteca SPL e a classe ArrayObject sobre a forma tradicional de manipular arrays.
A Biblioteca SPL (Standard PHP Library) é um conjunto de classes e interfaces em PHP que implementam algumas formas comuns de acessos à dados. São projetadas para manipular estruturas complexas como arrays, xml, diretórios, consultas ao banco de dados, dentre outros.
Dentro da biblioteca SPL, a classe ArrayObject permite manipular vetores e a classe ArrayIterator permite percorrer vetores por meio de uma interface totalmente orientada a objetos. Nos artigos anteriores já comentamos sobre estes recursos. Neste artigo, iremos estudar uma vantagem em utilizar a biblioteca SPL para tratar vetores, em especial por meio da utilização da classe ArrayObject.
No exemplo a seguir, temos uma classe chamada Carro. Esta classe possui dois métodos setTipos() que recebe um vetor e getTipos() que retorna este vetor. Após instanciar um objeto e definir alguns tipos, tentamos acessar o vetor resultante indicando um índice, neste caso o índice 2. Vejam que o resultado deste código é um erro, pois o PHP não permite este acesso direto. Para funcionar isto, seria necessário atribuir os tipos para uma variável auxiliar que armazenasse o vetor resultante e após isto, acessar este vetor.
<?php
class Carro
{
private $tipos;
public function setTipos($tipos)
{
$this->tipos = $tipos;
}
public function getTipos()
{
return $this->tipos;
}
}
$palio = new Carro;
$palio->setTipos(array('fire', 'ELX1.0', 'ELX1.4', '1.8R'));
var_dump($palio->getTipos()[2]); // Parse error: syntax error, unexpected '[' in /tmp/use.php on line 19
?>A biblioteca SPL, por meio da classe ArrayObject, oferece uma interface totalmente orientada a objetos para acessar os vetores.
No exemplo que segue, estamos reescrevendo o código anterior para que o mesmo faça uso da classe ArrayObject. Desta forma, podemos acessar o índice 2 do vetor resultante utilizando o método offsetGet() do objeto ArrayObject resultante.
<?php
class Carro
{
private $tipos;
public function setTipos(Array $tipos)
{
$this->tipos = new ArrayObject($tipos);
}
public function getTipos()
{
return $this->tipos;
}
}
$palio = new Carro;
$palio->setTipos(array('fire', 'ELX1.0', 'ELX1.4', '1.8R'));
var_dump($palio->getTipos()->offsetGet(2)); // Resultado: string(6) "ELX1.4"
?>









