2010-11-18 106 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