有人可以填空。我需要在类上调用静态函数。我需要在这里使用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
}
}
答案 0 :(得分: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]);
}
答案 1 :(得分:1)
使用call_user_func函数:
http://php.net/manual/en/function.call-user-func.php
示例:
call_user_func('myClassName::'.$function);
答案 2 :(得分: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 ();
}
}
答案 3 :(得分: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]);
}