Closure::getCurrent

(PHP 8 >= 8.5.0)

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

Описание

public static 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, делает код чище и снижает риск ошибок.

Добавить

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

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