No artigo anterior, postei sobre o anúncio do PHP 5.5.0 alpha, citando as novidades da futura versão do PHP. Neste artigo, veremos sobre a melhoria "Derreferenciamento de arrays e strings constantes" (constant array/string dereferencing). Não se assuste com o nome, pois é uma melhoria simples de entender.
Derreferenciamento de arrays
O derreferenciamento de arrays, nada mais é do que o acesso a uma posição do array. Até a versão 5.3, só podiamos acessar uma posição de um arrray utilizando o operador colchetes sobre uma variável do tipo array. Por exemplo:
$a = array(1, 2, 3); echo $a[1]; // Derreferenciando a posicao 1
Na versão 5.4, foi introduzido o suporte ao derreferenciamento de arrays retornados por métodos/funções. Ou seja, quando um método ou função retornava um valor do tipo array, poderiamos usar o colchetes diretamente após a chamada. Por exemplo:
// Funcao que retorna um array function obter_array() { return array(1, 2, 3); } echo obter_array()[1]; // Derreferenciando a posicao 1 do retorno da funcao
E, finalmente, na versão 5.5, será possível derreferenciar arrays "constantes", ou seja, derreferenciar uma posição do array durante a própria declaração do array. Por exemplo:
echo array(1, 2, 3)[1]; // Derreferenciando a posicao 1 do array
Podemos usar este recurso quando temos um conjunto de valores conhecido, mas queremos obter um deles dinamicamente. Por exemplo:
// obtemos o ID da cor dinamicamente (1 ou 2) $id_cor_desejada = (int)$_GET['id_cor_desejada']; // Obtemos o valor dentro do conjunto conhecido $cor_desejada = array(1 => '#FF0000', 2 => '#0000FF')[$id_cor_desejada];
Neste caso, o array não fica na memória após a execução da linha, trazendo uma economia de memória. Além disso, este derreferenciamento é um pouco mais rápido, provavelmente porque não é preciso atribuir o array a uma variável para depois acessar uma posição dela.
Note que este recurso também vale para derreferenciamento de arrays associativos (hash tables), que utilizam strings na indexação:
echo array('a' => 123, 'b' => 456, 'c' => 789)['b']; // derreferenciando a posicao 'b'
E também derreferenciar matrizes constantes:
echo array( array(1, 2, 3), array(4, 5, 6), array(7, 8, 9) )[1][0]; // derreferenciando a posicao [1][0], exibindo o valor "4"
Vale lembrar que, no PHP 5.4, podemos criar arrays de forma simplificada, usando os colchetes, e também podemos derreferenciá-los diretamente:
echo ['a', 'b', 'c'][1]; // Derreferenciando a posicao 1 do array
Derreferenciamento de strings
Bom, o derreferenciamento de strings segue a mesma lógica de arrays. A diferença é que acessamos um caractere da string ao invés de uma posição do array.
Até a versão 5.3:
$str = 'Brasil vence Argentina'; echo $str[3];
Na versão 5.4:
function get_mensagem() { return 'Dia 23 de novembro tem black friday'; } echo get_mensagem()[3];
Na versão 5.5:
echo "Fifa 13 para PS3 ou XBOX 360 é bom demais"[3];
O derreferenciamento de strings pode ser útil para obter um caractere dinamicamente, dentro de uma lista de caracteres conhecida. Acredito que seja um pouco mais raro do que o derreferenciamento de arrays, mas acho que vale a pena para manter a consistência do operador colchetes (ter o mesmo efeito em arrays e strings).
2 comentários
Ótimo post! Consegui entender perfeitamente como funciona o Derreferenciamento de arrays e strings constantes.
Valeu!
Post bem interessante. Valeu Rubens.
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