Я использую функцию filter_var () с FILTER_CALLBACK.
Что-то вроде этого:
$value = filter_var($value, FILTER_CALLBACK, array('options' => 'my_func'));
my_func () обычно получает значение $ в качестве аргумента:
function my_func($val) { if (some cond) { return $val; } else { return false; } }
Теперь я хочу использовать другую переменную $ var в my_func () из внешней области (я имею в виду с filter_var ()).
Один из вариантов – объявить его глобальным в функции. Другой – передать его в качестве аргумента.
Как я могу избежать объявления global и передать аргумент $ var как аргумент?
Если вы используете 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"
Конечно, этот пример не действительно «проверяет» что-либо, просто немного меняет текст, но он должен дать вам представление о том, как это работает.
EDIT: судя по комментариям, вы хотите использовать определенную функцию для определенных значений, не проверяя, какой из них использовать в каждом цикле. Считаете ли вы использование 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>'; }
function my_func($val,$val2=null) { if (some cond) { return $val; } else { return false; } }