2

FILTER_CALLBACKで'filter_var()'関数を使用しています。
このようなもの:

$value = filter_var($value, FILTER_CALLBACK, array('options' => 'my_func'));

my_func()は通常、引数として$valueを受け取ります。

function my_func($val)
{
    if (some cond)
    {
        return $val;
    }
    else
    {
        return false;
    }
}  

ここで、外部スコープのmy_func()で別の$ varを使用します(つまり、filter_var()を使用します)。
1つのオプションは、関数でグローバルとして宣言することです。もう1つは、引数として渡すことです。
グローバルの宣言を避け、引数として$ varを渡すにはどうすればよいですか?

4

2 に答える 2

0
function my_func($val,$val2=null)
{
    if (some cond)
    {
        return $val;
    }
    else
    {
        return false;
    }
}  
于 2012-11-12T12:06:12.837 に答える
0

PHP 5.3以降を使用している場合は、クロージャを使用できます。

function my_func($val, $arg1, $arg2)
{
    return $arg1.': '.$val.' '.$arg2;
}

$testVar = 'test';
$result = filter_var($testVar, FILTER_CALLBACK, array('options' => function($var) {
    return my_func($var, 'someValue', 'someOtherValue');
}));

var_dump($result); // string(30) "someValue: test someOtherValue"

もちろん、この例は実際には何も「検証」せず、テキストを少し変更するだけですが、それがどのように機能するかを理解できるはずです。

編集:コメントから判断すると、各ループでどの関数を使用するかを確認せずに、特定の値に対して特定の関数を使用する必要があります。call_user_funcの使用を検討しましたか?次に例を示します。

function myFunc1($arg1, $arg2) { return 'Executed myFunc1 with arguments: '.$arg1.' '.$arg2; }
function myFunc2($arg1, $arg2) { return 'Executed myFunc2 with arguments: '.$arg1.' '.$arg2; }

$functionsToUse = array(
    'myFunc1',
    'myFunc2'
);

foreach ($functionsToUse as $func)
{
    echo call_user_func($func, 'value', 'another value').'<br>';
}
于 2012-11-12T13:02:03.110 に答える