Closure::getCurrent

(PHP 8 >= 8.5.0)

Closure::getCurrentВозвращает текущее выполняемое замыкание

Описание

public static Closure::getCurrent(): Closure

Метод возвращает текущее выполняемое замыкание. Метод в первую очередь полезен для рекурсивных замыканий без обязательного захвата ссылки на переменную замыкания через ключевое слово use.

Метод доступен только внутри замыкания; вызов извне контекста замыкания сгенерирует ошибку.

Список параметров

Сигнатура функции не содержит параметров.

Возвращаемые значения

Метод возвращает текущий объект Closure.

Ошибки

При вызове извне контекста замыкания метод выбросит ошибку Error.

Примеры

Пример #1 Пример получения замыкания методом Closure::getCurrent()

Следующая функция вычисляет n-е число Фибоначчи через рекурсивные вызовы замыкания, которое возвращается методом Closure::getCurrent():

<?php

$fibonacci
= function (int $n) {
if (
0 === $n || 1 === $n) {
return
$n;
}

$fn = Closure::getCurrent();
return
$fn($n - 1) + $fn($n - 2);
};

echo
$fibonacci(10); // Выведет: 55

Пример #2 Сравнение с традиционным подходом

До PHP 8.5 для реализации рекурсивных замыканий требовалось захватить ссылку на переменную замыкания через ключевое слово use:

<?php

// Традиционный подход, который по-прежнему работает в PHP 8.5
$fibonacci = function (int $n) use (&$fibonacci) {
if (
$n === 0) {
return
0;
}

if (
$n === 1) {
return
1;
}

return
$fibonacci($n - 1) + $fibonacci($n - 2);
};

echo
$fibonacci(10); // Выведет: 55

Метод Closure::getCurrent() не требует объявления переменной со ссылкой в предложении use, делает код чище и снижает риск ошибок.

Добавить

Примечания пользователей

Пользователи ещё не добавляли примечания для страницы
To Top