2010-11-18 107 views
1

有人可以填寫空白。我需要調用一個類的靜態函數。我需要在這裏使用eval嗎?動態調用靜態函數?

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

回答

1

每個人都有部分權利。

首先這個數組是錯誤的。

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

它應該是:

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

這可以讓你打電話 - 因爲2人所說 - call_user_func和鮑勃你叔叔。

$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

如果你總是會叫上你只能把方法名陣列中同一類的方法然後像這樣打電話給他們:

$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

目前我只需要Splashpage是唯一需要的類,但我認爲在未來這會改變。謝謝。 – JasonS 2010-11-18 11:55:16

2

如果你有PHP 5.2.3或更高版本,call_user_func()將與該格式傳遞的靜態方法的工作:

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

另外,如果你要返回方法調用的結果向右走,你不應該需要一個循環,因爲如果條件只會得到一個機會來評估真實:

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

method_exists需要2個參數,而不是一個。 – JasonS 2010-11-18 12:10:27