update page now

Closure::getCurrent

(PHP 8 >= 8.5.0)

Closure::getCurrentReturns the currently executing closure

Description

public static Closure::getCurrent(): Closure

Returns the currently executing closure. This method is primarily useful for implementing recursive closures without needing to capture a reference to the closure variable using the use keyword.

This method must be called from within a closure; calling it outside of a closure context will result in an error.

Parameters

This function has no parameters.

Return Values

Returns the currently executing Closure instance.

Errors/Exceptions

Throws an Error if called outside of a closure context.

Examples

Example #1 Closure::getCurrent() example

Using Closure::getCurrent() to implement a recursive Fibonacci function:

<?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); // Outputs: 55
?>

Example #2 Comparison with traditional approach

Prior to PHP 8.5, implementing recursive closures required capturing a reference to the closure variable using the use keyword:

<?php
// Traditional approach (still works in 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); // Outputs: 55
?>

The Closure::getCurrent() approach eliminates the need to declare the variable with a reference in the use clause, making the code cleaner and less error-prone.

See Also

add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top