Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Llamar funciones desde array

Estas en el tema de Llamar funciones desde array en el foro de PHP en Foros del Web. Buenas! A ver si me podéis ayudar a acortar código en esto... Tengo un include que son funciones para un proyecto PHP, con una estructura ...
  #1 (permalink)  
Antiguo 15/03/2013, 04:01
 
Fecha de Ingreso: abril-2012
Ubicación: 41°37′00″N, 00°37′00″E
Mensajes: 462
Antigüedad: 12 años
Puntos: 33
Llamar funciones desde array

Buenas!

A ver si me podéis ayudar a acortar código en esto...

Tengo un include que son funciones para un proyecto PHP, con una estructura similar a esta:

Código PHP:
Ver original
  1. <?php
  2. if($_GET['f'] === 'nombre_1')
  3.   echo(nombre_1());
  4. elseif($_GET['f'] === 'nombre_2')
  5.   echo(nombre_2());
  6. elseif...
  7. else
  8.   echo ''//404 / error
  9.  
  10. function nombre_1(){
  11.  
  12. }
  13.  
  14. function nombre_2(){
  15.  
  16. }
  17. ...
  18. ?>

Antes de acabar el proyecto y colgarlo (lo tengo en local) tengo pensado introducir los parámetros $_GET que recibe este include en una tabla de una base de datos, para después comprobar mediante una consulta si es un parámetro "adecuado", y si lo es ejecutar la función... es decir, algo así como:

Código PHP:
Ver original
  1. if(!in_array($_GET['f'], $params))
  2.  //error
  3.  
  4. //llamar a la función

Pero me gustaría saber si podría, por ejemplo, (supongo que si) hacer un array asociativo, para evitar todo el bloque "if", y hacer simplemente:

Código PHP:
Ver original
  1. $params = tomaParametros(); //recoge los parámetros válidos de la base de datos
  2.  
  3. if(!in_array($_GET['f'], $params))
  4.   echo(''); //error
  5.  
  6. echo($params[$_GET['f']]);

Teniendo en centa que previamente el $_GET está escapado (sin caracteres "raros", para evitar inyección).

¿Es posible hacer algo así? Me pareció ver que se puede usar "eval()" en PHP, pero no estoy seguro...

Gracias!
  #2 (permalink)  
Antiguo 15/03/2013, 04:41
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: Llamar funciones desde array

Funciones variables: http://php.net/manual/es/functions.v...-functions.php
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 15/03/2013, 04:46
 
Fecha de Ingreso: abril-2012
Ubicación: 41°37′00″N, 00°37′00″E
Mensajes: 462
Antigüedad: 12 años
Puntos: 33
Respuesta: Llamar funciones desde array

Vale...

Creo que acabo de ser invitado a la fiesta de la estupidez...

Si mi problema hubiera sido un toro ya me hubiera pillado... XD

Gracias por responder!
  #4 (permalink)  
Antiguo 15/03/2013, 04:50
 
Fecha de Ingreso: septiembre-2011
Mensajes: 219
Antigüedad: 12 años, 7 meses
Puntos: 31
Respuesta: Llamar funciones desde array

Lo unico que se me ocurre sería algo así:

Código PHP:
Ver original
  1. $params = array(
  2.         'nombre_1',
  3.         'nombre_2'
  4.     );
  5.  
  6. (!in_array($_GET['f'], $params) ? error() : $_GET['f']());

Obviamente habria que validar varias cosas, pero sirve para captar la idea
  #5 (permalink)  
Antiguo 15/03/2013, 04:59
 
Fecha de Ingreso: abril-2012
Ubicación: 41°37′00″N, 00°37′00″E
Mensajes: 462
Antigüedad: 12 años
Puntos: 33
Respuesta: Llamar funciones desde array

Cita:
Iniciado por cachusan Ver Mensaje
Lo unico que se me ocurre sería algo así:

Código PHP:
Ver original
  1. $params = array(
  2.         'nombre_1',
  3.         'nombre_2'
  4.     );
  5.  
  6. (!in_array($_GET['f'], $params) ? error() : $_GET['f']());

Obviamente habria que validar varias cosas, pero sirve para captar la idea
Que va, más sencillo...

Código PHP:
Ver original
  1. //a este include llega el $_GET escapado ya
  2. $params = getParams();//obtiene los códigos "válidos"
  3.  
  4. if(!in_array($_GET['f'], $params)
  5.  echo(''); //error -> en la página que llama ya comprueba el texto retornado y si es vacío lanza un error 404
  6.  
  7. $params[$_GET['f']];

Y así me ahorro un gran tiempo de cómputo y algún que otro KB de archivo...

Etiquetas: funciones, tabla
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 09:26.