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

function_php base_php

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

    Анонимные функции или замыкания - функции без имени, которые вызывают или передают как значения с параметром callable
    Анонимные функции создаются через класс Closure

    #preg_replace_callback - функция поиска по регулярному выражению и замену с использованием callback-функции echo preg_replace_callback( '~([a-z])~', function ($match) { return strtoupper($match[1]); }, 'hello' ); #Анонимные функции можно присваивать переменным $test = function($name){ echo "hello " . $name; }; $test('Николай');

    Замыкания также наследуют переменные из родительской области видимости. Каждая такая переменная должна быть передана в языковую конструкцию use.

    #Наследование переменной из родительской области видимости $message = 'Привет'; $test = function () { var_dump($message); }; #При вызове анонимной функции NULL $test(); #Теперь попробуем присвоить переменной анонимную функцию с унаследованной переменной $test = function () use ($message) { var_dump($message); }; #Вызов вернет Привет $test(); #Важно понимать, что анонимная функция будет наследовать значение переменной до объявления функции $message = 'мир'; #Вернет Привет $test(); #Можно совмещать с аргументами $test = function ($arg) use ($message) { var_dump($arg . " " . $message . "!!!"); }; $test('Привет'); #Можно указать тип возвращаемого значения $test = function ($arg) use ($message): string { return $arg . " " . $message . "!!!"; }; echo $test('Привет'); #Замыкания и область видимости #Подробнее как использовать по ссылке: https://www.php.net/manual/ru/functions.anonymous.php

    При объявлении замыкания в контексте класса, текущий класс автоматически связывается с замыканием, а члены функции получают доступ к переменной $this в области видимости функции. Определяют статические анонимные функции, если не требуется автоматическое связывание с текущим классом.

    #Связывание переменной $this class Test { public function testing() { return function() { var_dump($this); }; } } $object = new Test(); $function = $object->testing(); $function(); #
    Вызов анонимной функции, которую содержит свойство

    Вызвать анонимную функцию, которую сохранили в свойстве класса, напрямую получится, если взять свойство в круглые скобки

    class Foo { public $bar; public function __Construct() { $this->bar = function() { return 42; }; } } $obj = new Foo(); echo ($obj->bar)();
    Источники
    Последнее изменение: 08.11.2024 05:24


    Связанные темы
    Здесь пока нет комментариев
    Добавлять комментарии могут только авторизованные пользователи

    Авторизоваться
    Я буду рекламой
    Я тоже буду рекламой
    И я
    ВВЕРХ