Языки программирования

Анонимные функции

Анонимные функции, также известные как замыкания (closures), позволяют создавать функции, не имеющие определенных имен. Они наиболее полезны в качестве значений callback-параметров, но также могут иметь и множество других применений.

Использование анонимных фукций в php стало возможным, начиная с версии 5.3.0. В версии 5.4.0 в анонимных функциях стало возможным использовать $this. Вот пример анонимной функции:
  <?php
  echo preg_replace_callback('~-([a-z])~', function ($match) {
    return strtoupper($match[1]);
}, 'hello-world');
// выведет helloWorld
?>
Замыкания также могут быть использованы в качестве значений переменных; PHP автоматически преобразует такие выражения в экземпляры внутреннего класса Closure. Присвоение замыкания переменной использует тот же синтаксис, что и для любого другого присвоения, включая завершающую точку с запятой. Вот маленький пример присвоения анонимной функции переменной:
<?php
$greet = function($name)
{
    printf("Hello %s\r\n", $name);
};

$greet('World');
$greet('PHP');
?>

Использование ключевого слова use.

Замыкания могут также наследовать переменные из родительской области видимости. Любая подобная переменная должна быть объявлена в заголовке функции. Наследование переменных из родительской области видимости не то же самое, что использование глобальных переменных. Глобальные переменные существуют в глобальной области видимости, которая не меняется, вне зависимости от того, какая функция выполняется в данный момент. Родительская область видимости — это функция, в которой было объявлено замыкание.
Функция обращается к своему контексту при помощи ключевого слова use. Это схоже с использованием ключевого слова global, но не идентично ему. Вот пример:
<?php
$arr = array(1, 2, 3, 4, 5);
 
$func = function($par) use ($n){
   return $par + $n; 
};
$n = 1;
$b = array_map($func, $arr);
 
print_r($b);
// Выведит: Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 )
?>
Самоучитель по PHP