Foros del Web » Programando para Internet » PHP »

Cómo referenciar variables dinámicamente?

Estas en el tema de Cómo referenciar variables dinámicamente? en el foro de PHP en Foros del Web. A ver si me explico. Lo que quiero saber es la forma en la que PHP funciona a la hora de hacer referencia a variables ...
  #1 (permalink)  
Antiguo 28/09/2005, 11:41
 
Fecha de Ingreso: mayo-2003
Mensajes: 527
Antigüedad: 21 años, 5 meses
Puntos: 3
Cómo referenciar variables dinámicamente?

A ver si me explico. Lo que quiero saber es la forma en la que PHP funciona a la hora de hacer referencia a variables de forma dinámica.

Por ejemplo, tengo varias variables $res1, $res2, ..., $res10 y quiero mostrar con un bucle sus valores pero el siguiente bucle me da error:

Código PHP:
for ($i=1$i <= 10$i++) {
   echo eval(
'$res'.$i)."<br />\n";

Una cosa de este estilo debería funcionar en otros lenguajes. Cómo lo hago entonces en PHP?
  #2 (permalink)  
Antiguo 28/09/2005, 12:34
Avatar de EternalWitness  
Fecha de Ingreso: agosto-2005
Mensajes: 146
Antigüedad: 19 años, 3 meses
Puntos: 2
que tal con un array en vez de varias variables?

Código PHP:
for ($i=1$i <= 10$i++) {
   echo eval(
$res[$i])."<br />\n";

  #3 (permalink)  
Antiguo 28/09/2005, 13:43
Avatar de Vaalegk  
Fecha de Ingreso: abril-2005
Mensajes: 154
Antigüedad: 19 años, 7 meses
Puntos: 2
Código PHP:
for ($i=1$i <= 10$i++) {
   echo ${
'res'.$i}."<br />\n";

  #4 (permalink)  
Antiguo 28/09/2005, 13:54
 
Fecha de Ingreso: mayo-2003
Mensajes: 527
Antigüedad: 21 años, 5 meses
Puntos: 3
Usando un array tendrías que quitar el eval() del ejemplo, y para un caso real como ese sí, sería la mejor solución.

Pero el ejemplo que he puesto lo he hecho expresamente para saber cómo crear una referencia a una variable. Imagínate que de antemano no sabemos la variable que tenemos que usar y dependiendo de las circunstancias tendremos que usar una u otra. Tendremos que crear una cadena que referencie a la variable específica para poder acceder a ella. Eso es lo que me gustaría saber a mí cómo implementarlo en PHP.
  #5 (permalink)  
Antiguo 28/09/2005, 13:58
 
Fecha de Ingreso: mayo-2003
Mensajes: 527
Antigüedad: 21 años, 5 meses
Puntos: 3
Cita:
Iniciado por Vaalegk
Código PHP:
for ($i=1$i <= 10$i++) {
   echo ${
'res'.$i}."<br />\n";

Hola Vaalegk. Con tu ejemplo no me da error, pero no me aparecen los resultados en pantalla. ¿?
  #6 (permalink)  
Antiguo 28/09/2005, 14:09
Avatar de Vaalegk  
Fecha de Ingreso: abril-2005
Mensajes: 154
Antigüedad: 19 años, 7 meses
Puntos: 2
No sale en pantalla, que raro a mi me funciona bien...
bueno aqui hay mas ejemplos varios.

Código PHP:
//con variables
$res1=1;
$res2=5;
$res3=80;

for (
$i=1$i <= 3$i++) {
   echo ${
'res'.$i}."<br />\n";
}


$varname='res';
echo(
'<hr />');
for (
$i=1$i <= 3$i++) {
   echo ${
$varname.$i}."<br />\n";


//llamando funciones
function hola($msg){
    echo(
'hola '.$msg);
}

$func='hola';
$func('Test');

echo(
'<hr />');

// con clases

class test{
    var 
$data;
    function 
__construct($d){
        
$this->data=$d;
    }
    function 
ver(){
        echo(
$this->data.'<br />');        
    }
}

$t1=new test(1);
$t2=new test(2);
$t3=new test(3);

for (
$i=1$i <= 3$i++){
    echo ${
't'.$i}->ver();

  #7 (permalink)  
Antiguo 28/09/2005, 14:31
 
Fecha de Ingreso: mayo-2003
Mensajes: 527
Antigüedad: 21 años, 5 meses
Puntos: 3
Ah, pues copiando y pegando tus ejemplos funciona perfectamente también, pero en el mío no. Qué raro no? Algo se escapa.
Pongo el código completo:

Código PHP:
<html>
<head>
<title>Documento sin t&iacute;tulo</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<?php 

for ($i=0$i 4$i++) { 
   echo ${
'res'.$i}."<br />\n"


 
?>
</body>
</html>
Aun así muchas gracias por los ejemplos. Ya tengo claro el mecanismo.
  #8 (permalink)  
Antiguo 28/09/2005, 15:34
Avatar de Vaalegk  
Fecha de Ingreso: abril-2005
Mensajes: 154
Antigüedad: 19 años, 7 meses
Puntos: 2
el problema que tienes es que estas intentando imprimir algo que no existe..
$r1 al $r4 no existen

si lo que desea es "crear" las variables primero :

for ($i=1; $i <= 3; $i++) {
${'res'.$i}=$i*2;
}
  #9 (permalink)  
Antiguo 28/09/2005, 16:39
 
Fecha de Ingreso: mayo-2003
Mensajes: 527
Antigüedad: 21 años, 5 meses
Puntos: 3
Sí, ya me dí cuenta que borré las declaraciones de variables. Torpe de mí.

De todas formas lo importante es que ya tengo claro lo que quería saber. Muchas gracias por la ayuda!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:42.