Страницы

Поиск по вопросам

понедельник, 24 февраля 2020 г.

Замыкание в PHP

#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!

Комментариев нет:

Отправить комментарий