是否可以修改下面的脚本,以便每个选项的值都是函数?
<?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)
答案 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;
}