脚本随机执行2个函数中的1个?

时间:2011-06-02 14:29:37

标签: php dynamic-function

是否可以修改下面的脚本,以便每个选项的值都是函数?

<?php

$option[0] = 'html option 1';
$option[1] = 'html option 2';

echo $option[rand()%count($option)];
?>

显然,这不起作用:

function get_ads_rotation(){
    $option[0] = get_ad_option1();
    $option[1] = get_ad_option2();
   echo $option[rand()%count($option)];

}

(上述randomization script的道具为yes123)

2 个答案:

答案 0 :(得分:1)

Here

$option[0] = 'get_ad_option1';
$option[1] = 'get_ad_option2';
echo call_user_func($option(...));

答案 1 :(得分:1)

直接回答问题:变量可以存储自PHP 5.3以来的匿名函数。它会是这样的:

$option[1] = function($args) { /* do something here with $args */ };

但是在前面的版本中,您可以通过在选项中存储函数名称,然后将所选选项作为第一个参数传递,来实现与call_user_func()类似的功能。 E.g。

$option[1] = 'functionOne';
// ...
call_user_func($option[1], /* other parameters if needed */);

但是,如果值来自用户输入,则它有一个安全漏洞。

因此,更安全的选择是根据所选选项手动调用函数并使用switch语句:

switch ($option[rand()%count($option)]) {
    case 'html option 1' : functionOne(); break;
    case 'html option 2' : functionTwo(); break;
    case 'html option 3' : functionThree(); break;
    // ....
    default :  break;
}