PHP oferece nativamente o tipo array, que possui bastante flexibilidade. As principais características do array de PHP é que ele permite índices inteiros ou alfanuméricos, e é auto-redimensionável, ou seja, cresce ou diminui conforme elementos são adicionados ou removidos.
Quem já trabalhou com linguagens mais baixo nível, como C ou C++, deve saber que manter o controle sobre um array auto-redimensionável implica em perda de performance em função da realocação de memória. Para prover uma solução mais restrita e mais rápida para PHP, foi criada a classe SplFixedArray, disponível a partir da versão 5.3 de PHP. Ela só aceita inteiros como índices (de zero até o tamanho menos um) e tem tamanho fixo (definido na criação do objeto), embora possa ser redimensionado a qualquer momento. Quanto menos redimensionamento é feito, mais ela tende a ser mais rápida que um array convencional.
Embora seja uma classe, a SplFixedArray tem capacidade de funcionar (sintaticamente) de forma parecida com um array convencional, pois implementa as interfaces Iterator, ArrayAccess e Countable. Porém, seus recursos também podem ser invocados através da chamada de seus métodos.
Exemplo de uso:
// Cria o array de tamanho 10, com todas posicoes valendo NULL
$array = new SplFixedArray(10);
// Definindo o valor da posicao 0 (primeira posicao)
$array[0] = 'Rubens';
// Definindo o valor da posicao 9 (ultima posicao) atraves de metodo
$array->offsetSet(9, 'Teste');
// Tentando definir o valor de uma posicao invalida (gera-se excecao)
try {
$array[10] = 'Eita';
} catch (RuntimeException $e) {
echo $e->getMessage();
}
// Obtendo o valor da posicao 0
$x = $array[0];
// Obtendo o valor da posicao 9 atraves de metodo
$y = $array->offsetGet(9);
// Checando se a posicao 1 foi definida (eh diferente de NULL)
$existe = isset($array[1]);
// Checando se a posicao 1 foi definida utilizando metodo
$existe = $array->offsetExists(1);
// Obtendo o tamanho do array (10)
$tamanho = count($array);
// Obtendo o tamanho do array atraves de metodo
$tamanho = $array->count();
// Outra forma de obter o tamanho do array com outro metodo
$capacidade = $array->getSize();
// Percorrendo o array com foreach
foreach ($array as $indice => valor) {
echo $indice.' = '.$valor.PHP_EOL;
}
// Redimensionando o array
$array->setSize(20);
// Obtendo o array correspondente a forma convencional
$array_convencional = $array->toArray();
6 comentários
Olá, a função SplFixedArray funcionou na máquina local e não funciona em meu servidor php na uolhost. Qual poderá ser o problema?
Olá, Anônimo
Verifique os seguintes itens:
* se está usando PHP 5.3 ou superior: var_dump(PHP_VERSION);
* se possui a extensão SPL instalada: var_dump(extension_loaded('spl'));
* se a spl possui a classe: var_dump(class_exists('SplFixedArray'));
Rubens, Verifiquei nas configurações do servidor na UOLHOST e a versão do PHP é a 5.2. Isso impossibilita a utilização da função em meus sistemas ou tem como lidar com essa diferênça.
Rubens, Nas configurações avançadas do servidor eu pude alterar a versão para 5.3 e agora já está funcionando. Muito obrigado pela contribuição.
Olá, Mauro
Realmente só dá pra usar essa classe a partir do PHP 5.3. Que bom que conseguiu mudar fácil.
meus cumprimento caro Mauro na verdade isto me ajudou muito, valeu
Postar um comentário
Nota: fique a vontade para expressar o que achou deste artigo ou do blog.
Dica: para acompanhar as respostas, acesse com uma conta do Google e marque a opção "Notifique-me".
Atenção: o blogger não permite inclusão de tags nos comentários, por isso, use algum site externo para postar seu código com dúvidas e deixe o link aqui. Exemplo: pastebin.com