#php
Наткнулся на такую необычную конструкцию, ранее нигде не видел:
$variable = function($any) use ($alternate_var, &$yet)
{
/// Any code
};
Как работает данная конструкция, особо интересно это use ($alternate_var, &$yet)
Ответы
Ответ 1
Читать. callback-функция это. Т. е. когда нужна функция, но лень/другая_причина создавать отдельную функцию, которую один раз как параметр передашь. По решению Свыше, у них нет доступа к родительской области видимости, поэтому используется use как метод передачи переменных в локальный контекст callback-функции. $a = 1; $b = [5]; array_map(function($q){ print $a; }, $b); // Undefined variable: a $a = 1; $b = [5]; array_map(function($q) use ($a){ print $a; }, $b); // 1 Важно: Конструкция use передаёт значение, а не ссылку. Т. е. изменение переданной переменной не повлияет на родительскую переменную. Если это необходимо, используйте &: $a = 1; $b = [5]; array_map(function($q) use (&$a){ print $a; $a = 2; }, $b); print $a; // 12Ответ 2
В приведенном примере используется анонимная функция с наследованием переменной из родительской области видимости. (Подробнее http://php.net/manual/ru/functions.anonymous.php) Статья на хабре про применение замыканий в PHP здесь. Пример: $alternate_var = 'world'; $yet = '!'; $variable = function($any) use ($alternate_var, &$yet) { return $any . $alternate_var . $yet; }; echo $variable('Hello '); // Hello world!
Комментариев нет:
Отправить комментарий