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 に答える