1

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

<?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)];

}

(上面随机化脚本的 yes123 的道具)

4

2 回答 2

1

这里

$option[0] = 'get_ad_option1';
$option[1] = 'get_ad_option2';
echo call_user_func($option(...));
于 2011-06-02T14:46:34.657 回答
1

直接回答这个问题:变量只能从 PHP 5.3 开始存储匿名函数。它会是这样的:

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

但是,在之前的版本中,您可以call_user_func()通过将函数名称存储在选项中,然后将所选选项作为第一个参数传递来实现类似的效果。例如

$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;
}
于 2011-06-02T14:46:41.150 回答