Foros del Web » Programando para Internet » PHP »

Acceder a variables de referencia

Estas en el tema de Acceder a variables de referencia en el foro de PHP en Foros del Web. Hola gente, tengo una duda que no puedo resolver. supongamos que tengo algo así, bien simple: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código PHP: Ver original $foa = 1 ...
  #1 (permalink)  
Antiguo 16/10/2013, 16:57
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 11 años, 11 meses
Puntos: 320
Acceder a variables de referencia

Hola gente, tengo una duda que no puedo resolver.

supongamos que tengo algo así, bien simple:
Código PHP:
Ver original
  1. $foa = 1;
  2.     $fob = 1;
  3.     $foc = 1;
  4.     $fod = 1;
  5.     $foe = 1;
  6.    
  7.     $info = array('foa' => &$foa , 'fob' => &$fob , 'foc' => &$foc , 'fod' => &$fod , 'foe' => &$foe);
  8.    
  9.     echo('<hr>');
  10.     print_r($info);
  11.    
  12.     $foa = 2;
  13.     $fob = 2;
  14.     $foc = 2;
  15.     $fod = 2;
  16.     $foe = 2;
  17.    
  18.     echo('<hr>');
  19.     print_r($info);
  20.    
  21.     $arrAux = $info;
  22.    
  23.     echo('<hr>');
  24.     print_r($info);
  25.     echo('<br>');
  26.     print_r($arrAux);
  27.    
  28.     $foa = 3;
  29.     $fob = 3;
  30.     $foc = 3;
  31.     $fod = 3;
  32.     $foe = 3;
  33.    
  34.     echo('<hr>');
  35.     print_r($info);
  36.     echo('<br>');
  37.     print_r($arrAux);

Lo que quiero hacer es que $arrAux no apunte a las variables como lo hace $info sino que contenga los valores del momento en que se asigno, si como en el ultimo caso pongo las variables en 3, $arrAux deberia quedar con los valores en 2, no mantener la referencia.

Vi por ahi que si hago un for y asigno elemento a elemento rompo la referencia y consigo mi objetivo, pero el problema es que esto se ejecuta muchas veces y esa alternativa es muy lenta, existe otra manera de lograr el objetivo?
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #2 (permalink)  
Antiguo 16/10/2013, 17:14
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Acceder a variables de referencia

No le veo sentido a usar referencias si quieres el valor que tenían las variables en el momento en que fueron asignadas, sin importar lo que pasa después con ellas.

Si pudieras explicar un poco tu propósito, tal vez podríamos sugerirte algo.
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 16/10/2013, 17:22
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 11 años, 11 meses
Puntos: 320
Respuesta: Acceder a variables de referencia

Hola triby, mi proposito es usar esto para bindear dinamicamnete los resultados de una consulta con mysqli stmt, en cada resultado el array $info tiene los punteros a los resultados ya que estan relacionados con bind_result y lo que quieo es copiarlos a otro array para trabajarlos desde ahi y cerrar la consulta.
no tengo acceso a los valores originales y de esta forma solo me queda el ultimo valor repetido, pero no todos los anteriores.

Mi problema se resume al que plantee pero aqui pongo el codigo real, talvez conoscas otra alternativa:

Código PHP:
Ver original
  1. protected function _bindResultados(mysqli_stmt $stmt)
  2.     {
  3.         $parametros = array();
  4.         $resultados = array();
  5.  
  6.         $meta = $stmt->result_metadata();
  7.  
  8.         $registro = array();
  9.         while ($campo = $meta->fetch_field()) {
  10.             $registro[$campo->name] = null;
  11.             $parametros[] = &$registro[$campo->name];
  12.         }
  13.  
  14.         call_user_func_array(array($stmt, 'bind_result'), $parametros);
  15.                // este es el doble loop que quiero evitar, ya que se hace muy lento
  16.         while ($stmt->fetch()) {
  17.             $x = array();
  18.             foreach ($registro as $key => $valor)
  19.                 $x[$key] = $valor;
  20.  
  21.             array_push($resultados, $x);
  22.         }
  23.  
  24.         return $resultados;
  25.     }
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #4 (permalink)  
Antiguo 16/10/2013, 17:23
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Acceder a variables de referencia

Dicho problema parece que puede resolverse usando closures o generadores, consulta el manual.

Además pienso que la referencia es innecesaria.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 16/10/2013, 17:32
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 8 meses
Puntos: 793
Respuesta: Acceder a variables de referencia

Si te preocupa tanto el rendimiento no deberías usar esto:

Código PHP:
Ver original
  1. array_push($resultados, $x);

Cita:
Nota: Si se utiliza array_push() para añadir un solo elemento en el array, es mejor utilizar $array[] = ya que de esta forma no existe la sobrecarga de llamar a una función.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #6 (permalink)  
Antiguo 16/10/2013, 17:33
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 11 años, 11 meses
Puntos: 320
Respuesta: Acceder a variables de referencia

voy a leer bien esa info a ver de que se trata muchas gracias
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #7 (permalink)  
Antiguo 16/10/2013, 17:53
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 11 años, 11 meses
Puntos: 320
Respuesta: Acceder a variables de referencia

andresdzphp gracias! se me había pasado por alto ese detalle

pateketrueke no te enojarías si te pido que me expliques como usarías tu los generadores para este problema? me refiero a donde los ubicarías y para obtener que valores?
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #8 (permalink)  
Antiguo 16/10/2013, 18:03
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Acceder a variables de referencia

Ejemplo:
Código PHP:
Ver original
  1. function all_results() {
  2.   while ($row = sql_fetch_result()) {
  3.     yield $row;
  4.   }
  5. }
  6.  
  7. foreach (all_results() as $row) {
  8.   print_r($row);
  9. }

Eso seudo código así que tendrás que interpretarlo.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #9 (permalink)  
Antiguo 16/10/2013, 18:23
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 11 años, 11 meses
Puntos: 320
Respuesta: Acceder a variables de referencia

muchas gracias, he armado esto pero no funciona:

Código PHP:
Ver original
  1. protected function all_results($result) {
  2.     while ($row = $result->fetch_array(MYSQLI_ASSOC)) {    
  3.             yield $row;
  4.         }
  5.     }
  6.        
  7. protected function _bindResultados(mysqli_stmt $stmt)
  8.     {      
  9.         $result = $stmt->get_result();     
  10.          
  11.         foreach (all_results($result) as $row) {
  12.             print_r($row);
  13.                        $resultados[] = $row;
  14.         }
  15.         return $resultados;
  16.     }

me arroja:
Cita:
Parse error: syntax error, unexpected '$row' (T_VARIABLE)
probe a usar uno de los ejemplos del manual y tiran el mismo error, hace falta tener algo habilitado en el server para poder usarlos?
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #10 (permalink)  
Antiguo 16/10/2013, 18:25
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Acceder a variables de referencia

Los generadores existen sólo en versiones de PHP 5.5 o superior, consulta el manual.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #11 (permalink)  
Antiguo 17/10/2013, 18:48
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 11 años, 11 meses
Puntos: 320
Respuesta: Acceder a variables de referencia

Ufaaaaaa, bueno voy a tener que esperar que los de Zend actualicen su venrcion de server para poder probarlo entonces, muchas gracias de todas formas, no sabia que existian los generadores y parecen bastante interesantes
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios

Etiquetas: referencia, variable, variables
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 04:16.