Foros del Web » Programando para Internet » PHP »

¿Como lo harian?

Estas en el tema de ¿Como lo harian? en el foro de PHP en Foros del Web. Les explico el problema, estoy haciendo una especie de framework para migración de bases de datos, este framework migra bases de datos en textos plano ...
  #1 (permalink)  
Antiguo 08/02/2009, 15:06
Avatar de Nigthmare  
Fecha de Ingreso: diciembre-2006
Ubicación: /home/vsanchez
Mensajes: 38
Antigüedad: 13 años, 2 meses
Puntos: 0
¿Como lo harian?

Les explico el problema, estoy haciendo una especie de framework para migración de bases de datos, este framework migra bases de datos en textos plano y/o DBF, y dado que las personas pueden escribir funciones especiales argege un tag a los metadatos llamado php, aqui el usuario del framework pondra la sintaxis de la funcion que escribio para hacer acciones personales.

Dentro de una de las clases del framework las siguientes funciones son las encargadas de interpretar ese tag php:
Código:
private function phpAction($func){
$funcion =$this->getFunctionName($func);
if(function_exists($funcion)){
   $params = $this->getParamList($func);
   $eval ="call_user_func(\"".$funcion."\",".$params.");";
   $sql=",".eval($eval);
   return $sql;
}
}

private function getFunctionName($func){
  return substr($func,0,strpos($func,"("));
}

private function getParamList($func){
    $func=substr($func,strpos($func,"(")+1);
    $func=substr($func,0,strpos($func,")"));
    $func="\"".$func."\"";
    return $func;
}
Eso ya esta hecho y llama a las funciones que yo quiera y me comprueba si existen, el problema radica en que al llamar a eval este no retorna ningún valor; cuando el propio manual de PHP dice:

A partir de PHP 4, eval() devuelve NULL a menos que se llame return en el código evaluado, en cuyo caso el valor pasado a return es devuelto.

De antemano gracias

Última edición por Nigthmare; 08/02/2009 a las 15:25
  #2 (permalink)  
Antiguo 08/02/2009, 16:23
okram
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: ¿Como lo harian?

Cita:
Iniciado por Nigthmare Ver Mensaje
Código PHP:
   $eval ="call_user_func(\"".$funcion."\",".$params.");";
   
$sql=",".eval($eval); 
[...]

A partir de PHP 4, eval() devuelve NULL a menos que se llame return en el código evaluado, en cuyo caso el valor pasado a return es devuelto.
No veo un return en el código que la pasas a eval()...

  #3 (permalink)  
Antiguo 08/02/2009, 21:32
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 11 años, 10 meses
Puntos: 2534
Respuesta: ¿Como lo harian?

además... que sentido tiene el eval() ¿???

osea... si call_user_func_array() lo puedes ejecutar sin eval y esta diseñada para pasarle parámetros!!!

http://php.net/call_user_func_array

no tiene sentido, que perdida de tiempo....

__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #4 (permalink)  
Antiguo 08/02/2009, 22:09
Avatar de Nigthmare  
Fecha de Ingreso: diciembre-2006
Ubicación: /home/vsanchez
Mensajes: 38
Antigüedad: 13 años, 2 meses
Puntos: 0
Información Respuesta: ¿Como lo harian?

Los return del eval, estan en cada una de las funciones que se llaman a el, la razón de que no utilizo asi directamente el call_user_func es que los parametros pasados pueden ser diversos; se me olvido comentar que en el tag php hago lo siguiente:

php="miFuncion1(param1,param2)"

o

php="miFuncion2(param1)"

Si lo hago con call_user_func llamaria la función y los parametros los pasaría como un sola cadena y dentro de cada función tendria que hacer la separación de la cadena e interpretación, en cambio con eval puedo hacer que cada parametro se pase como parametro de la función.

Ok, la función call_user_func_array no la conocia, trataré con esa función comentaré lo que suceda, Gracias
  #5 (permalink)  
Antiguo 08/02/2009, 22:12
okram
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: ¿Como lo harian?

No. Como tú mismo lo citaste. eval() devolverá null a menos que en el código evaluado haya un return. Tan fácil como:

Código PHP:
$eval ="return call_user_func(\"".$funcion."\",".$params.");"
Te cuento que una vez quise hacer lo mismo, pero tuve bastates problemas sobretodo con las comillas. Y como dice pateketrueke, es mejor que uses call_user_func_array() y así te evitas todos estos problemas Estudia esa función y te darás cuenta que hace exactamente lo que deseas.

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:13.