我正在使用' 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作为参数传递?
答案 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>';
}