Foros del Web » Programando para Internet » PHP »

Crear función con nombre dinamico?

Estas en el tema de Crear función con nombre dinamico? en el foro de PHP en Foros del Web. Hola, expongo mi situación: Supongamos que tengo un array: $frutas = array( 0 => "manzana" , 1 => "naranja" , 2 => "limon" , 3 ...
  #1 (permalink)  
Antiguo 15/09/2010, 05:06
 
Fecha de Ingreso: diciembre-2007
Mensajes: 107
Antigüedad: 16 años, 3 meses
Puntos: 4
Crear función con nombre dinamico?

Hola, expongo mi situación:
Supongamos que tengo un array:
$frutas = array(
0 => "manzana" ,
1 => "naranja" ,
2 => "limon" ,
3 => "mandarina"
);

Entonces, necesito crear una función que se llame como cada valor de cada indice del array:
Había pensado en esto:

for ($i = 0; $i <= count($frutas); $i++) {
function $('fruta_'.$frutas[$i])( ... ) {
...
}
}

Alguna idea de como podría hacerlo?
Saludos y gracias
  #2 (permalink)  
Antiguo 15/09/2010, 07:08
 
Fecha de Ingreso: junio-2010
Mensajes: 24
Antigüedad: 13 años, 10 meses
Puntos: 1
Respuesta: Crear función con nombre dinamico?

No te lo puedo asegurar al cien por cien porque nunca he probado algo así, pero estoy casi seguro que no puedes definir funciones de esa forma.


De todas formas no entiendo porque tienes que definir X funciones iguales con nombres distintos. Lo ideal sería implementar una función genérica que tomara como argumento el valor de cada índice del array e hiciera algo en concreto por cada valor.


Planteatelo de esa forma que seguro que te será más sencillo.
  #3 (permalink)  
Antiguo 15/09/2010, 07:09
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: Crear función con nombre dinamico?

Eso lo logras de forma sencilla con el concepto variables variable.
Código PHP:
Ver original
  1. <?php
  2. $frutas = array("manzana", "naranja", "limon", "mandarina");
  3. foreach($frutas as $key => $fruta){
  4.     $$fruta = $key;
  5. }
  6. echo $manzana . '<br />';
  7. echo $naranja . '<br />';
  8. echo $limon . '<br />';
  9. echo $mandarina;

Edito:
No leí bien, pero esta forma lo puedes lograr, aunque sigue el concepto de variables variable.
Código PHP:
Ver original
  1. <?php
  2. $frutas = array("manzana", "naranja", "limon", "mandarina");
  3. foreach($frutas as $fruta){
  4.     $$fruta = function($f){
  5.         return ('$fruta = ' . $f);
  6.     };
  7. }
  8.  
  9. echo $manzana('manzana') . '<br />';
  10. echo $naranja('naranja') . '<br />';
  11. echo $limon('limon') . '<br />';
  12. echo $mandarina('mandarina') . '<br />';
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos

Última edición por abimaelrc; 15/09/2010 a las 07:18
  #4 (permalink)  
Antiguo 15/09/2010, 13:59
 
Fecha de Ingreso: diciembre-2007
Mensajes: 107
Antigüedad: 16 años, 3 meses
Puntos: 4
Respuesta: Crear función con nombre dinamico?

Es que quiero crear un plugin para WordPress, que genere unos shortcodes a partir de un array, siguiendo unos patrones:
for ($i = 0; $i <= count($frutas); $i++) {
add_shortcode( $frutas[$i] , array(&$this, 'shortcode_'.$frutas[$i]) );
}

Pero luego todos estos shortcodes, tienen que tener su función:
for ($i = 0; $i <= count($frutas); $i++) {
function $('shortcode_'.$frutas[$i])( $atts = array(), $content = NULL ) {
return ...;
}
}

Pero parece que no consigo crear las funciones de esta forma
  #5 (permalink)  
Antiguo 15/09/2010, 14:01
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: Crear función con nombre dinamico?

Ya te indique como hacerlo

Edito:
De todos modos, también se puede hacer de esta forma
Código PHP:
Ver original
  1. <?php
  2. $frutas = array("manzana", "naranja", "limon", "mandarina");
  3. foreach($frutas as $fruta){
  4.     eval("function $fruta(){
  5.         return '$fruta';
  6.     }");
  7. }
  8. echo manzana() . '<br />';
  9. echo naranja() . '<br />';
  10. echo limon() . '<br />';
  11. echo mandarina() . '<br />';
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos

Última edición por abimaelrc; 15/09/2010 a las 14:14
  #6 (permalink)  
Antiguo 15/09/2010, 14:19
 
Fecha de Ingreso: diciembre-2007
Mensajes: 107
Antigüedad: 16 años, 3 meses
Puntos: 4
Respuesta: Crear función con nombre dinamico?

no he terminado de entender:
$$fruta = function($f){

podría hacer 'fruta_'.$fruta[$i] = function (...

?


en esencia, busco crear una función con nombre dinamico (podemos olvidarnos del array)
$myfunc = "call_me";
function $myfunc() { ... }
  #7 (permalink)  
Antiguo 15/09/2010, 14:20
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: Crear función con nombre dinamico?

Trata lo que te indique en el último post que te deje.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #8 (permalink)  
Antiguo 15/09/2010, 14:41
 
Fecha de Ingreso: diciembre-2007
Mensajes: 107
Antigüedad: 16 años, 3 meses
Puntos: 4
vale, es la función eval lo que necesito, luego te digo que tal me fue.

Muchas gracias

Hola, estoy tratando de usar la función eval para crear funciones con nombre dinámico, pero tengo muchos problemas con funciones dentro del eval y demás.

El código que quiero integrar en un eval() es el siguiente:
Código PHP:
function $bb[$i]( $atts = array(), $content NULL ) {
    if ( 
NULL === $content ) return '';    
    return 
'<div class="a-'.$aa[$i].'"><b>'.$bb[$i].'</b>' do_shortcode$content ) . '</div>';

He probado muchas formas, pero ninguna me funciona.
La que mas se acerca, debe ser:
Código PHP:
eval("
function $aa[$i]( $atts = array(), $content = NULL ) {
    if ( NULL === $content ) return '';    
    return '<div class=\"a-$aa[$i]\"><b>$bb[$i]</b>' . do_shortcode( $content ) . '</div>';
}
"
); 
pero he de hacer algo con ( $atts = array(), $content = NULL ) y con ' . do_shortcode( $content ) . '

Alguien podría ayudarme?

Muchas Gracias!

Última edición por GatorV; 16/09/2010 a las 09:03
  #9 (permalink)  
Antiguo 15/09/2010, 15:59
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 14 años, 6 meses
Puntos: 334
Respuesta: ayuda con eval()

Cita:
function $bb[$i]( $atts = array(), $content = NULL ) {
o.o? una funcion array ? eso no existe :)
__________________
More about me...
~ @rhyudek1
~ Github
  #10 (permalink)  
Antiguo 15/09/2010, 16:12
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: ayuda con eval()

Porque no le pones un nombre normal y lo mandas llamar desde una variable?
Código PHP:
Ver original
  1. function foo1() {};
  2.  
  3. $func = "foo1";
  4. $func();

Saludos.
  #11 (permalink)  
Antiguo 15/09/2010, 16:19
 
Fecha de Ingreso: diciembre-2007
Mensajes: 107
Antigüedad: 16 años, 3 meses
Puntos: 4
Respuesta: ayuda con eval()

Existir, tiene que existir, es para crear un plugin en WordPress
Y si hago:
function shortcode_fecha( $atts = array(), $content = NULL ) {
if ( NULL === $content ) return '';
return '<div class="h-fecha"><b>Fecha: </b>' . do_shortcode( $content ) . '</div>';
}
Funciona, pero tengo que hacerlo con eval()
  #12 (permalink)  
Antiguo 15/09/2010, 17:01
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: ayuda con eval()

Ya yo te contesté en el mensaje, solo que en las variables que coloques como parámetro y vayas a usar solo en la función debes escapar el símbolo de $ para que funcione. Ejemplo
Código PHP:
Ver original
  1. <?php
  2. $aa = array('foo', 'bar');
  3. $bb = array('baz', 'candy');
  4. function do_shortcode($v){
  5.     return md5($v); //no sé que hace esta función solo la cree para evitar el error.
  6. }
  7. for($i=0; $i<count($aa); $i++){
  8.     eval("
  9.     function $aa[$i]( \$atts = array(), \$content = NULL ) {
  10.         if ( NULL === \$content ) return '';    
  11.         return '<div class=\"a-$aa[$i]\"><b>$bb[$i]</b>' . do_shortcode( \$content ) . '</div>';
  12.     }
  13.     ");
  14. }
  15. echo foo(array('vegetable', 'fruits'), 'fooBarBazCandy');
  16. echo bar(array('vegetable', 'fruits'), 'fooBarBazCandy');

PD: Por favor, no dupliques temas para que se entienda desde el principio lo que quieres hacer.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos

Etiquetas: dinamico, nombre
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 10:33.