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

# Closure::getCurrent

(PHP 8 >= 8.5.0)

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

### Описание

public static function Closure::getCurrent(): Closure

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

Метод доступен только внутри замыкания; вызов извне контекста замыкания сгенерирует ошибку: `Error: Current function is not a closure.`.

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

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

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

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

### Ошибки

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

### Примеры

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

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

    <?php

    $fibonacci = function (int $n) {
        if ($n === 0 || $n === 1) {
            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`, делает код чище и снижает риск ошибок.

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open