【问题标题】:Script to execute 1 of 2 functions randomly?随机执行 2 个函数中的 1 个的脚本?
【发布时间】:2011-06-02 14:29:36
【问题描述】:

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

<?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 的道具)

【问题讨论】:

    标签: php dynamic-function


    【解决方案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;
    }
    

    【讨论】:

      【解决方案2】:

      Here:

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

      【讨论】:

        猜你喜欢
        • 2012-08-02
        • 2014-12-25
        • 2011-06-23
        • 2016-12-17
        • 2011-12-09
        • 2018-09-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多