Foros del Web » Programando para Internet » PHP »

Pasar argumento por referencia a una función con número de argumentos variable

Estas en el tema de Pasar argumento por referencia a una función con número de argumentos variable en el foro de PHP en Foros del Web. Hola a todos!! mi problema es el siguiente, estoy creando una función en php para hacer un select de una base de datos, esta función ...
  #1 (permalink)  
Antiguo 23/08/2010, 02:18
 
Fecha de Ingreso: octubre-2008
Ubicación: Plasencia
Mensajes: 109
Antigüedad: 16 años, 1 mes
Puntos: 6
Pasar argumento por referencia a una función con número de argumentos variable

Hola a todos!!
mi problema es el siguiente, estoy creando una función en php para hacer un select de una base de datos, esta función recibe tres argumentos fijos y el resto es variable según la consulta que se deseé hacer, algo como esto:
Código PHP:
Ver original
  1. sqlSelect($conn,$dbtype,$query,[$arg1,...,$argN]);

el problema es que necesito que los parametros variables sean tratado por referencia, es decir, que se pueda alterar su valor dentro de la función y este se mantenga fuera. ¿alguien tiene idea de como se puede hacer esto?
Una forma que he encontrado es situar el símbolo & delante de cada parámetro en la llamada a la función, pero esto me lanza un error php diciendo que esta técnica es obsoleta (deprecated), aunque esto se puede permitir modificando algun valor en el fichero php.ini, no obstante, si alguien conoce alguna forma más elegante de hacerlo estaría encantado de aprenderla.
De antemano gracias y un saludo
  #2 (permalink)  
Antiguo 23/08/2010, 04:33
Avatar de geq
geq
 
Fecha de Ingreso: agosto-2006
Ubicación: Rosario
Mensajes: 655
Antigüedad: 18 años, 3 meses
Puntos: 22
Respuesta: Pasar argumento por referencia a una función con número de argumentos vari

Hola,

No hay punteros en php tal como es en C por ejemplo, pero si referencias que sirve más o menos a lo mismo. Algo así debería funcionarte:

Código PHP:
    $a=1;
    
    function 
b($c) {
        
$c=2;
    }

    
b(&$a);
    echo 
$a//imprime 2 
Saludos!
  #3 (permalink)  
Antiguo 23/08/2010, 05:47
 
Fecha de Ingreso: octubre-2008
Ubicación: Plasencia
Mensajes: 109
Antigüedad: 16 años, 1 mes
Puntos: 6
Respuesta: Pasar argumento por referencia a una función con número de argumentos vari

Cita:
Iniciado por geq Ver Mensaje
Hola,

No hay punteros en php tal como es en C por ejemplo, pero si referencias que sirve más o menos a lo mismo. Algo así debería funcionarte:

Código PHP:
    $a=1;
    
    function 
b($c) {
        
$c=2;
    }

    
b(&$a);
    echo 
$a//imprime 2 
Saludos!
lo que dices es lo que comento en el post de anteponer el símbolo & delante del argumento que queremos pasar por referencia en la llamada a la función, lo que pasa es que php lanza un error diciendo que eso que estamos haciendo está obsoleto y no está permitido, aunque te dice que si quieres lo puedes activar modificando el valor de no recuerdo qué parámetro de configuración en el fichero php.ini.

De todos modo gracias por tu ayuda.

Saludos.
  #4 (permalink)  
Antiguo 23/08/2010, 06:27
Avatar de geq
geq
 
Fecha de Ingreso: agosto-2006
Ubicación: Rosario
Mensajes: 655
Antigüedad: 18 años, 3 meses
Puntos: 22
Respuesta: Pasar argumento por referencia a una función con número de argumentos vari

Hola,

Si lo haces así tampoco te funciona:

Código PHP:
    $a=1
     
    function 
b(&$c) { 
        
$c=2
    } 

    
b($a); 
    echo 
$a
Eso no debería estar deprecado, de hecho está en la documentación de php 5.

Saludos
  #5 (permalink)  
Antiguo 24/08/2010, 01:35
 
Fecha de Ingreso: octubre-2008
Ubicación: Plasencia
Mensajes: 109
Antigüedad: 16 años, 1 mes
Puntos: 6
Respuesta: Pasar argumento por referencia a una función con número de argumentos vari

Cita:
Iniciado por geq Ver Mensaje
Hola,

Si lo haces así tampoco te funciona:

Código PHP:
    $a=1
     
    function 
b(&$c) { 
        
$c=2
    } 

    
b($a); 
    echo 
$a
Eso no debería estar deprecado, de hecho está en la documentación de php 5.

Saludos
Sí, asi claro que funcionaría pero eso no resuelve el problema de los argumentos variables que no son declarados en la cabecera de la función, me explico, yo tendría la siguiente función:

Código PHP:
Ver original
  1. function sqlSelect($dbtype, $conn, $query)
  2. {
  3. ...
  4. }

Pero a la hora de llamar a la función yo podría hacer lo siguiente:

Código PHP:
Ver original
  1. sqlSelect($dbtype,$conn,$query,$arg1,$arg2,...$argN);

Saludos.
  #6 (permalink)  
Antiguo 24/08/2010, 02:35
Avatar de OsSk4R  
Fecha de Ingreso: octubre-2006
Ubicación: $this->home
Mensajes: 824
Antigüedad: 18 años, 1 mes
Puntos: 74
Respuesta: Pasar argumento por referencia a una función con número de argumentos vari

Buenas,
No se si te he entendido bien, asi que ahí vá...


Creo que podrias utilizar func_get_args() y compaginarlo con func_num_args()

Código PHP:
Ver original
  1. function loquesea ($hola,$mundo)
  2. {
  3.     $num_parametros = func_num_args(); //En este ejemplo nos devuelve 5
  4.     $parametros = func_get_args();
  5.     for ($i = 0; $i < $num_parametros; $i++) {
  6.         echo $parametros[$i].'&nbsp;';
  7.     }
  8. }
  9.  
  10. loquesea('hola','mundo','enviado','por','pepe');

Saludos,
  #7 (permalink)  
Antiguo 24/08/2010, 03:50
 
Fecha de Ingreso: octubre-2008
Ubicación: Plasencia
Mensajes: 109
Antigüedad: 16 años, 1 mes
Puntos: 6
Respuesta: Pasar argumento por referencia a una función con número de argumentos vari

Cita:
Iniciado por DeFFeR Ver Mensaje
Buenas,
No se si te he entendido bien, asi que ahí vá...


Creo que podrias utilizar func_get_args() y compaginarlo con func_num_args()

Código PHP:
Ver original
  1. function loquesea ($hola,$mundo)
  2. {
  3.     $num_parametros = func_num_args(); //En este ejemplo nos devuelve 5
  4.     $parametros = func_get_args();
  5.     for ($i = 0; $i < $num_parametros; $i++) {
  6.         echo $parametros[$i].'&nbsp;';
  7.     }
  8. }
  9.  
  10. loquesea('hola','mundo','enviado','por','pepe');

Saludos,
lo que dices sirve para acceder a los paramestros, mostrarlos y modificarlos dentro del ámbito de la función si es necesario, pero no te permite modificarlos y que dicho cambio se mantenga fuera del ámbito de la función, para ello la única manera que encontrado hasta ahora es anteponer el símbolo & delante de cada parametro en la llamada a la función, pero esto lanza el siguiente error en PHP5:

Warning: Call-time pass-by-reference has been deprecated; If you would like to pass it by reference, modify the declaration of prueba(). If you would like to enable call-time pass-by-reference, you can set allow_call_time_pass_reference to true in your INI file.
  #8 (permalink)  
Antiguo 24/08/2010, 04:22
Avatar de OsSk4R  
Fecha de Ingreso: octubre-2006
Ubicación: $this->home
Mensajes: 824
Antigüedad: 18 años, 1 mes
Puntos: 74
Respuesta: Pasar argumento por referencia a una función con número de argumentos vari

Mmm ¿entonces lo mismo te podría servir global?
Saludos,

Etiquetas: argumentos, pasar, referencia, 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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 08:09.