Анонимные функции в PHP часто используются совместно с функциями высшего порядка (такими как array_map, array_filter и т.д.).
Только после того, как я недавно попал в небольшую яму с анонимными функциями, я начал серьезно изучать этот материал.
Типом данных анонимных функций является Closure.
<?php $anonymous = function () { echo "Это анонимная функция"; }; print_r(get_class($anonymous)); // Closure
Анонимные функции наследуют переменные родительской области видимости с помощью ключевого слова use.
<?php $message="Coder"; $greeting = function () use ($message) { echo "Привет $message\n"; }; $greeting(); // Привет Coder
Анонимные функции, наследующие переменные родительской области видимости, могут вызываться по ссылке.
<?php $message="Coder"; $concat = function () use (&$message) { $message .= " Studio"; }; $concat(); print_r("$message"); // Coder Studio
Анонимные функции не могут наследовать суперглобальные переменные.
К так называемым суперглобалам относятся: $_SERVER, $_GET, $_ENV, .... и т.д.
<?php $anonymous = function () use ($_SERVER) { echo "fatal error"; }; $anonymous(); // Fatal error: Cannot use auto-global as lexical variable
Если анонимная функция объявлена в классе, то ей не нужно наследовать $this, класс будет связан автоматически.
<?php class Test { public function testThis() { return function () { var_dump($this); }; } } $test = new Test; $anonymous = $test->testThis(); $anonymous(); // object(Test)#1 (0) {}
php > $a = fn(int $x) => 5 + $x;
php > echo $a(5);
10
Стрелочная функция более компактна, чем другие, и имеет только два отличия: