Variables variables PHP

Valoración del artículo:
Ofrecemos el significado y uso de variables variables en el lenguaje de programación PHP.
Publicado: 03/3/04
Atención: Contenido exclusivo de DesarrolloWeb.com. No reproducir. Copyright.
Escribo esta ayuda técnica sobre "variables variables" porque me parece un tema de no muy fácil comprensión pero de gran ayuda en cuanto a desarrollo con PHP, espero que a todos pueda ayudarnos a comprender un poco mejor si utilizo algún ejemplo práctico que en algunos momentos me ha ayudado a resolver ciertos problemas.

La explicación más sencilla y fácil de comprender se me ocurre sea la traducción al castellano de php.net, así que la pondré tal cual y después aplicaré la práctica procurando expresarme mas claramente.

############# Aquí comienza la explicación del sitio #######

A veces es conveniente tener nombres de variables variables. Dicho de otro modo, son nombres de variables que se pueden establecer y usar dinámicamente. Una variable normal se establece con una sentencia como:

<?php
$a = "hello";
?>


Una variable variable toma el valor de una variable y lo trata como el nombre de una variable. En el ejemplo anterior, hello, se puede usar como el nombre de una variable utilizando dos signos de dolar. p.ej.

<?php
$$a = "world";
?>


En este momento se han definido y almacenado dos variables en el árbol de símbolos de PHP: $a, que contiene "hello", y $hello, que contiene "world". Es más, esta sentencia:

<?php
echo "$a ${$a}";
?>


produce el mismo resultado que:

<?php
echo "$a $hello";
?>


Ambas producen el resultado: hello world.

############ Y aquí termina la explicación #############

El URL es http://mx.php.net/manual/es/language.variables.variable.php

Según creo, si hemos tenido algún contacto con la programación, habremos comprendido bastante bien la explicación, pero ¿ y como nos puede llegar a servir? ¿ en que ocasiones me puede ayudar?. Pues en particular lo he contemplado en situaciones donde en un archivo tengo que poner varios checkbox o radio buttons y en el siguiente tengo que examinar una a una esas variables; y como no deseo realizarlo de esta forma, los termino metiendo en un for, pero si he metido los nombres de los checkbox de la siguiente manera...

<form name='form1' method='post' action='guarda_preferencias.php'>
<table width='700' border='0'>
<tr>
<td><span class='style4'>Para Empezar </span></td>
</tr>
<tr>
<td><blockquote class='style5'><strong>
<input type='checkbox' name='pref_1' value='bienvenida'>
     Bienvenida</strong></blockquote></td> </tr>
<tr>
<td><blockquote class='style5'><strong>
<input type='checkbox' name='pref_2' value='temario'>
     Temario </strong></blockquote></td>
</tr>


y así sucesivamente hasta pref_n; en mi archivo guarda_preferencias.php, después del for que empezaría la revisión de la transferencia de cada checkbox, existiría el ligero inconveniente de tener que revisar $pref_$i, lo cual es un tremendo problema porque $pref_ no existe. Lo anterior yo lo he resuelto de la siguiente manera: hago uso de variables variables que me permitirán obtener el valor que realmente quiero, que es pref_1, pref_2....pref_n .

<?
for ($i=1;$i<=n;$i++){ //n es por supuesto el total de elementos checkbox
que hayamos creado
$nombre = "pref_$i";
$prefer = $$nombre;
if ($prefer != "") print "$nombre si trae algo, que es $prefer";
?>


Con lo cual $nombre hago que sea pref_ más el valor de $i, que irá aumentado de uno en uno cada vez que entre al for, y despues $prefer me dará el valor real de pref_1, pref_2, pref_3 y así hasta n, pudiendo yo evaluar cada checkbox uno a uno sin problemas, en este caso yo solo estoy evaluando que no esté vacío e imprimo el nombre y el valor.

Espero que haya quedado un poquito mas claro para todos, saludos!!

Comentarios
Fueron enviados 4 comentarios al artículo
1 comentario no revisado
3 comentarios revisados:
Por: una opción más
07/3/04
creo que tal vez es un poco mas eficaz nombrar el checkbox o cualquier otro campo que vaya a ser consecutivo de una serie de campos de la siguiente manera:
<input type="checkbox" value="valor" name="caja[]">
con lo que al enviarse se recibe en php
foreach($_POST['caja'] as cajita)

asi puedes recorres el array caja recibido por post uno a uno, sin siquiera tener necesidad de saber el número de campos.

saludos
Por: Roberto Bárcenas
16/3/05
Bien, por supuesto existen varias alternativas al caso, de hecho, haciendo uso de variables autoglobales como $_POST o $_GET no es necesario recurrir a las variables variables muchas de las veces $_POST["pref_$i"] y nada mas.

La solución de guardar los checkbox en un arreglo y después pasarlo por un foreach tambien es interesante.
Por otra parte, yo he probado el código en navegadores diferentes sobre plataformas diferentes y no existe problema.
Saludos a todos!

Diernan
Objetos
16/12/09
Hola Roberto, muy bueno el articulo. La pregunta es, ¿porque no funcion esto?
$_tabla=$tablas[0]; //viene de un query que devuelve todas las tablas de un bd
$$_tabla=new Tabla(); //clase que tiene argumentos: array id, nombre, cantidad_id

Manuales relacionados
Categorias relacionadas
El autor
Lectura recomendada
Compra este libro en Agapea, la librería urgente a domicilio.
Últimas noticias
Alojados en el grupo