2010-11-18 7 views
1

Quelqu'un pourrait-il remplir ce champ? J'ai besoin d'appeler une fonction statique sur une classe. Dois-je utiliser eval ici?Appel dynamique d'une fonction statique?

// Some settings require function calls 
$switch = array ('random_image' => 'Splashpage::get_random_image()', 'splash_photos_count' => 'Splashpage::count_splash_photos()'); 
foreach($switch as $key => $function) { 
    if ($name == $key) { 
     return ... $function 
    } 
} 

Répondre

1

Tout le monde a partiellement raison.

Tout d'abord, ce tableau est erroné.

$switch = array ('random_image' => 'Splashpage::get_random_image()', 'splash_photos_count' => 'Splashpage::count_splash_photos()'); 

Il devrait être:

$switch = array ('random_image' => 'Splashpage::get_random_image', 'splash_photos_count' => 'Splashpage::count_splash_photos'); 

Cela vous permet d'appeler - comme 2 personnes ont dit - call_user_func et bobs votre oncle.

$switch = array ('random_image' => 'Splashpage::get_random_image', 'splash_photos_count' => 'Splashpage::count_splash_photos'); 
if(isset($switch[$name])) { 
    return call_user_func($switch[$name]); 
} 
1

Si vous toujours appeler ces méthodes sur le même nom de méthode classe que vous ne pouviez mettre dans votre tableau puis appelez-les comme ceci:

$switch = array ('random_image' => 'get_random_image', 'splash_photos_count' => 'count_splash_photos'); 
foreach($switch as $key => $function) { 
    if ($name == $key) { 
     return Splashpage::$function(); 
    } 
} 
+0

Actuellement je besoin que splashpage est la seule classe nécessaire, mais je pense à l'avenir cela va changer. Merci bien. – JasonS

2

Si vous avez PHP 5.2.3 ou plus tard, call_user_func() travaillera avec des méthodes statiques passées dans ce format:

foreach($switch as $key => $function) { 
    if ($name == $key) { 
     return call_user_func($function); 
    } 
} 

Aussi, si vous allez retourner le résultat de l'appel de méthode tout de suite, vous ne devriez pas avoir besoin d'une boucle puisque si la condition aura seulement une chance d'évaluer sur vrai:

if (isset($switch[$name]) && is_callable($switch[$name])) { 
    return call_user_func($switch[$name]); 
} 
+0

method_exists requiert 2 paramètres, pas un. – JasonS