Desenvolvimento - PHP

Variáveis variáveis

Este artigo é uma rápida maneira de ensinar o que é uma dúvida bastante frequente, como criar sisteminhas que geram automaticamente combos de HTML e usá-las de maneira produtiva para uma exclusão, por exemplo.

por Marcelo Pereira Fonseca da Silva



Este artigo é uma rápida maneira de ensinar o que é uma dúvida bastante frequente, como criar sisteminhas que geram automaticamente combos de HTML e usá-las de maneira produtiva para uma exclusão, por exemplo.

Para se fazer isso usa-se o conceito de uma variável que não somente contém um valor que há distinção que é o conceito de variável, mas também o seu próprio nome, ao que chamamos de "variáveis variáveis"

Detalhe, não errei o nome e escrevi duas vezes não, por isso o coloquei entre aspas.

Qual é o conceito ?

Você pode usar além da variável propriamente dita, o conteúdo dela como nome para fazer uma nova atribuição.

Exemplo da PHP.net

<?php
$a = "ola";
$$a = "mundo";
?>

neste exemplo existem duas variáveis que são $a contendo a palavra ola e $$a que é a "variável variável"

contendo o "mundo"

bom, uma das representações disso é

<?
echo "$a ${$a}";
?>
num exemplo prático pode ser feito algo como
<?php 

...

$valor = "algo_$x";
e $$valor iria conter o que nós queremos..
...
?>
você irá entender o exemplo acima quando começarmos o nosso exemplo.

Vamos seguir sempre o conceito e tentar implementar isso ai temos então essa porção de código:

<?php

for ($x=0;$x<10;$x++)
{
    echo "<input type=checkbox name=\"ck_$x\" value=\"OK\"> Texto Aqui<BR>\n";
}

?>

Fizemos um for muito peculiar em sistemas, onde "printamos" na tela o valor retornado do banco de dados e queremos gerar nossos checkbox dinamicamente.

Notem que o value é sempre o mesmo, e o nome há um fator diferenciado-os que é exatamente o conceito de variável variável, cada nome do formulário é uma variável no PHP e logo estes nomes todos se diferenciam por um código auto incrementado.

Então vamos continuar..

O exemplo completo fica:

<?php

if ($_POST["send"]) {

  // aqui entra todo o conceito..
 
    for ($x=0;$x<10;$x++) {
		
		$valor = "ck_$x";
		
		if ($$valor == "OK") {
            echo "O id $x foi selecionado!<BR>\n";
		}
	}

} else {
?>

<html>

<form name="legal" method="POST">
<input type="hidden" name="send" value="anything">
<?php

for ($x=0;$x<10;$x++)
{
    echo "<input type=\"checkbox\" name=\"ck_$x\" value=\"OK\"> Texto Aqui<BR>\n";
}

?>
<input type="submit" value="go !" name="enviar">
</form>
</html>
<?}?>

A primeira má notícia é que este script vai funcionar somente quando a register_globals estiver habilitada (como On), e a segunda é que não tem como usar algo como ${$_GET} ${$_POST} e assim por diante.

Conforme a dica do Ragen e do Silvano aqui vai a dica de como trabalhar com isso com a register_globals do php.ini setada como off:

$a = &$_GET["foo"]; 
E então $$a iria conter o conteúdo do vetor por referência e provavelmente com isso dê para trabalhar com a register_globals setada como off.

Não vou fazer um script completo para deixar a imaginação de cada um fluir e termos aqui bons exemplos de como melhorar a idéia proposta acima.

Abraços e até o próximo artigo!

Marcelo Pereira Fonseca da Silva

Marcelo Pereira Fonseca da Silva - Presta consultoria em desenvolvimento de aplicações em PHP e atua como desenvolvedor web em uma empresa especializada, é também um dos membros de tradução do manual do PHP e participa ativamente de melhorias para a linguagem. Trabalho também com GNU/Linux entre outras tecnologias.