2011-06-02 60 views
1

是否可以修改下面的腳本,以便每個選項的值是一個函數?腳本隨機執行2個函數中的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)]; 

}

(道具約會拜訪了上述randomization script

回答

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; 
} 
+0

甜!關閉測試一些代碼。 THanks mkilmanas。 +1 – 2011-06-02 14:51:20

1

Here

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

感謝crazylammer。有用! – 2011-06-02 15:06:17

相關問題