是否可以添加filter_var()函数用户定义的参数?

时间:2012-11-12 12:03:45

标签: php

我正在使用' filter_var()'功能与FILTER_CALLBACK 像这样:

$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作为参数传递?

2 个答案:

答案 0 :(得分:0)

function my_func($val,$val2=null)
{
    if (some cond)
    {
        return $val;
    }
    else
    {
        return false;
    }
}  

答案 1 :(得分: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>';
}