Функция обратного вызова с использованием переменных, вычисляемых вне ее
В основном я хотел бы сделать что-то вроде этого:
$arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
$avg = array_sum($arr) / count($arr);
$callback = function($val){ return $val < $avg };
return array_filter($arr, $callback);
Возможно ли это? Вычисление переменной вне анонимной функции и ее использование внутри?
Ответы
Ответ 1
Вы можете использовать ключевое слово use
для наследования переменных из родительской области. В вашем примере вы можете сделать следующее:
$callback = function($val) use ($avg) { return $val < $avg; };
Для получения дополнительной информации см. страницу руководства анонимные функции.
Ответ 2
использовать глобальные переменные i.e $GLOBAL ['avg']
$arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
$GLOBALS['avg'] = array_sum($arr) / count($arr);
$callback = function($val){ return $val < $GLOBALS['avg'] };
$return array_filter($arr, $callback);