Анонимные функции
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
Связанные темы
Здесь пока нет комментариев
Добавлять комментарии могут только авторизованные пользователи