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.
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;