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