动态调用静态函数?

时间:2010-11-18 11:35:55

标签: php function static

有人可以填空。我需要在类上调用静态函数。我需要在这里使用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
    }
}

4 个答案:

答案 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]);
}