2010-11-18 19 views
1

Kann jemand das Feld ausfüllen? Ich muss eine statische Funktion für eine Klasse aufrufen. Muss ich Eval hier verwenden?Dynamisch eine statische Funktion aufrufen?

// 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 
    } 
} 

Antwort

1

Jeder hat teilweise Recht.

Erstens ist dieses Array falsch.

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

es sein sollte:

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

Diese Sie aufrufen können - als 2 Leute gesagt haben - call_user_func und Bobs dein Onkel.

$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

Wenn Sie immer diese Methoden auf der gleichen Klasse rufen Sie in Ihrem Array Methodennamen setzen könnte und nenne sie dann so:

$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

Derzeit brauche ich nur Splashpage ist die einzige Klasse erforderlich, aber ich denke, in der Zukunft wird sich das ändern. Vielen Dank. – JasonS

2

Wenn Sie PHP 5.2.3 oder höher, call_user_func() wird mit statischen Methoden in diesem Format übergeben arbeiten:

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

Auch wenn du gehst, um das Ergebnis des Methodenaufrufes zurück sofort, Sie sollten keine Schleife brauchen, da das, wenn Bedingung nur eine Chance erhalten wird, auf wahr zu bewerten:

+0

method_exists benötigt 2 Parameter, nicht einen. – JasonS

Verwandte Themen