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())。
一种选择是在函数中将其声明为全局。另一种是将它作为参数传递。
如何避免声明全局并将 $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 回答