Linux slogan
Visite também: Segurança Linux · BR-Linux.org · Dicas-L · Doode · NoticiasLinux · SoftwareLivre.org · UnderLinux



» Screenshot
Linux: #!
Por edps
» Login
Login:
Senha:

Se você ainda não possui uma conta, clique aqui.

Esqueci minha senha


Dica

Variáveis variáveis em PHP
Linux user
Publicado por Marcelino Janing em 20/11/2008

Login: mjaning, 27209 pontos
[ Hits: 9921 ]

Variáveis variáveis em PHP

Um poderoso recurso disponibilizado pelo PHP é o uso de variáveis dinâmicas, ou seja, é possível utilizar o conteúdo de uma variável para alcançar o conteúdo de uma outra variável. Ficou difícil? Mas é muito mais fácil do que parece...

Toda variável em PHP é precedida de um cifrão ($varnormal), e uma variável dinâmica em PHP é precedida de dois cifrões ou mais de dois cifrões ($$vardinamica).

Fazendo um comparativo, esta funcionalidade do PHP é similar a macro substituição do CLIPPER onde um AMPERSAND (&vardinamica) é utilizado com o mesmo propósito. Entretanto, PHP vai um pouco mais além do que conhecíamos em CLIPPER.

Exemplificando em PHP:

<?php
// Criando uma variável normal em PHP
$varnormal = "Esta é uma variável normal que armazena um conteúdo";

// Criando uma outra variável normal, mas agora o conteúdo será a string "varnormal" que é o nome da nossa outra variável.
$vardinamica = "varnormal";

// Acessando as variáveis normalmente
echo '<hr>' . $varnormal; // Imprime "Esta é uma variável normal que armazena um conteúdo"
echo '<hr>' . $vardinamica; // Imprime "varnormal"

// Agora a mágica do PHP, acessando a variável $varnormal dinamicamente através do conteúdo de $vardinamica
echo '<hr>' . $$vardinamica; // Imprime "Esta é uma variável normal que armazena um conteúdo"

// Entenda que $vardinamica contém a string "varnormal"
// E o segundo cifrão faz a mágica acessando o conteúdo do conteúdo com variável $varnormal
// Talvez esta sintaxe com a variável protegida por CURLY BRACKETS (Chaves) seja mais fácil de compreender.
echo '<hr>' . ${$vardinamica}; // Imprime "Esta é uma variável normal que armazena um conteúdo"

// Um processo de decomposição de variáveis acontece no PHP, veja o exemplo abaixo:
$a = "b";
$b = "c";
$c = "a";

echo "<hr>" . $$$$$a; // Imprime "c"

// Explanando a decomposição das variáveis:
// $a contém "b", e restam $$$$
// $$a contém "b" que contém "c", e restam $$$
// $$$a contém "b" que contém "c" que contém "a", e restam $$
// $$$$a contém "b" que contém "c" que contém "a" que contém "b", e resta $
// $$$$$a contem "b" que contém "c" que contém "a" que contém "b" que contém "c"

// Pronto, está explicado como o PHP chegou ao conteúdo string "c", simplesmente decompondo-se os diversos cifrões.
echo "<hr>";

?>

Entenda que uma variável dinâmica, ou variável variável como diz a documentação em php.net, é um atalho para uma outra variável. Não confunda esta técnica com o acesso a variáveis por referência, onde uma variável pode ser ponteirada para o conteúdo de uma outra variável onde um AMPERSAND (&) é utilizado como notação em PHP.

Variáveis variáveis e variáveis por referência são duas técnicas distintas, e cada uma têm a sua razão e finalidade própria.

Fontes:
Última dica: é possível obter o mesmo efeito de variáveis variáveis em JavaScript utilizando-se a função eval().

Confiram meus próximos artigos e dicas.

Até a próxima.


Outras dicas deste autor

Leitura recomendada
   Dica Linux recomendada Nasce site sobre Zend Framework
   Dica Linux recomendada Criando variáveis dinâmicas em PHP a partir de um formulário
   Dica Linux recomendada Funções com nomes variáveis em PHP, isso existe sim!
   Dica Linux recomendada PHP Debug
   Dica Linux recomendada Gerando Miniaturas de Imagens com PHP

Comentários
[1] Comentário enviado por everton3x em 05/05/2009 - 16:10h:

Uma utilidade para isso é:
foreach($_POST as $name => $value){
$$name = $value;
}

[2] Comentário enviado por mjaning em 08/05/2009 - 14:43h:

Na programação orientada a objetos (OOP) também podemos usar o recurso re variáveis dinâmicas para instanciar propriedades dinâmicas dentro de um objeto.

Class X {
public $varstatic = 0; // propriedade estática.

public function __construct($varname,$varvalue) {
// setando uma propriedade dinamincamente
$this->$varname = $varvalue;

// setando uma proriedade estática
$this->varstatic = $varvalue;
}
}

// Criando instância para classe X com parâmetros para o construct
$teste = new X('vardynamic','conteúdo qualquer');

// imprimindo a propriedade staticamente definida
print 'varstatic = ' . $teste->varstatic;
print '<br />';
// imprimindo a propriedade dinamicamente definida
print 'vardynamic = ' . $teste->vardynamic;







Contribuir com comentário


  
Para executar esta ação você precisa estar logado no site, caso contrário, tudo o que for digitado será perdido.
Responsável pelo site: Fábio Berbert de Paula - Conteúdo distribuído sob licença GNU FDL
Site hospedado por:

Viva o Linux

A maior comunidade Linux da América Latina! Artigos, dicas, tutoriais, fórum, scripts e muito mais. Ideal para quem busca auto-ajuda em Linux.