Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Ejecutar el contenido de una variable

Estas en el tema de Ejecutar el contenido de una variable en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola Miren, tengo en una variable de sesión un objeto, y en una superglobal (POST) el método al que quiero que llame dicho objeto. Bien, ...
  #1 (permalink)  
Antiguo 04/09/2005, 02:07
Zia
 
Fecha de Ingreso: agosto-2005
Mensajes: 9
Antigüedad: 18 años, 8 meses
Puntos: 0
Ejecutar el contenido de una variable

Hola
Miren, tengo en una variable de sesión un objeto, y en una superglobal (POST) el método al que quiero que llame dicho objeto.
Bien, para llamar al método escribo:
$_SESSION['objeto']->$_POST['metodo'];

Hasta ahí bien, pero el problema son los parámetros del método, en un principio no se cuantos son, por eso no los pongo literalmente, así que los almaceno todos en una variable de forma que finalmente el contenido de la variable es:
par1, par2, parX

Pero claro, si pongo ahora
$_SESSION['objeto]->$_POST['metodo']($parametros);

$parametros me lo toma como un único parámetro, todo texto.
Mi pregunta por tanto es si hay alguna forma de que interprete esa variable $parametros para que tome cada parametro independientemente, y no como una unica variable.

Muchas gracias, Un saludo.
  #2 (permalink)  
Antiguo 04/09/2005, 03:28
Avatar de DvD AdN  
Fecha de Ingreso: mayo-2005
Ubicación: Frente al monitor
Mensajes: 610
Antigüedad: 19 años
Puntos: 0
Para eso esta el foro de PHP Orientado a Objetos
__________________
Keep f***ing learning
Ask for f***ing help.
Use f***ing spell check.
Think about all the f***ing possibilities.
  #3 (permalink)  
Antiguo 04/09/2005, 03:44
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 19 años, 9 meses
Puntos: 102
Cita:
Iniciado por DvD AdN
Para eso esta el foro de PHP Orientado a Objetos
Tema movido.

Se agradecería la contribución si se reporta el tema (ícono de alerta en la parte superior derecha del tema, al lado del nùmero de mensaje ó en su defecto por MP), igual procurar tener cuidado el lugar donde los temas son planteados.

__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #4 (permalink)  
Antiguo 04/09/2005, 04:02
Avatar de DvD AdN  
Fecha de Ingreso: mayo-2005
Ubicación: Frente al monitor
Mensajes: 610
Antigüedad: 19 años
Puntos: 0
A ok, no sabía para que servía ese signito de arriba
__________________
Keep f***ing learning
Ask for f***ing help.
Use f***ing spell check.
Think about all the f***ing possibilities.
  #5 (permalink)  
Antiguo 04/09/2005, 12:42
Avatar de braulito  
Fecha de Ingreso: abril-2004
Ubicación: Cusco - Perú
Mensajes: 597
Antigüedad: 20 años
Puntos: 8
Puedes usar la función call_user_func, que te admite los parámetos que necesites. Revisa este enlace:

http://www.php.net/call_user_func
__________________
Braulio Soncco
braulio at buayacorp dot com
Buayacorp - Programación y Diseño
  #6 (permalink)  
Antiguo 04/09/2005, 14:37
 
Fecha de Ingreso: mayo-2005
Mensajes: 201
Antigüedad: 19 años
Puntos: 2
Cita:
Iniciado por Zia
Hola
Miren, tengo en una variable de sesión un objeto, y en una superglobal (POST) el método al que quiero que llame dicho objeto.
Bien, para llamar al método escribo:
$_SESSION['objeto']->$_POST['metodo'];

Hasta ahí bien, pero el problema son los parámetros del método, en un principio no se cuantos son, por eso no los pongo literalmente, así que los almaceno todos en una variable de forma que finalmente el contenido de la variable es:
par1, par2, parX

Pero claro, si pongo ahora
$_SESSION['objeto]->$_POST['metodo']($parametros);

$parametros me lo toma como un único parámetro, todo texto.
Mi pregunta por tanto es si hay alguna forma de que interprete esa variable $parametros para que tome cada parametro independientemente, y no como una unica variable.

Muchas gracias, Un saludo.
No tengo forma de comprobar en este momento lo que te voy a sugerir, asi que tendras que probarlo:
Lo que necesitas puedes hacerlo de varias formas aqui te van dos uno que la funcion reciva un arreglo con los valores que estas esperando y que no sabes cuantos son, y que el metodo del objeto trabaje ese arreglo mediante un whie, forech o for como mas prefieras.
La otra forma es que pases los parametros como lo estas haciendo en este momento y que uses las funciones func_num_args() y func_get_args() que te permiten contar y recuperar un nuemero variable de parametros en una funcion, para mas detalles visita la pagina oficial paar ser mas exactos en la siguientes ligas http://www.php.net/manual/es/function.func-get-args.php y http://www.php.net/manual/es/function.func-num-args.php si tienes alguna duda agrega tu metodo y vemos que estas haciendo.

Saludos.
  #7 (permalink)  
Antiguo 04/09/2005, 17:14
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 7 meses
Puntos: 41
Hola:
Lo que creo que Zia nos dice es que el método sí sabe cuántos parámetros espera.
El problema es que como el nombre del método viene en una variable, el script no sabe de antemano cuántos parámetros coresponden al método seleccionado.

Si tienes las variables separadas por una coma, no te será difícil ejecutar la sentencia utlizando la función eval():
http:www.php.net/eval

Sería algo como:
Código PHP:
$expresion "\$_SESSION['objeto]->".$_POST['metodo']."(".$parametros.")";
eval(
$expresion); 
Saludos
  #8 (permalink)  
Antiguo 05/09/2005, 06:40
Zia
 
Fecha de Ingreso: agosto-2005
Mensajes: 9
Antigüedad: 18 años, 8 meses
Puntos: 0
Solución usada

Gracias a todos por responder.
Al final la solución que he usado fue la que indicó jpinedo, muchas gracias, ya que también me resolviste una duda en otro post.

Un saludo.
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 07:00.