On 15 April 2025 00:01:18 BST, Krinkle <krin...@fastmail.com> wrote: >Eg: > >$a = function ($a) { > $aFn = Closure::current(...); > $aFn(4) === Closure::current(4); >};
I think there's some confusion on this thread; as I understand it, the proposal is not for a magic function to *call* the current closure, but a way to get a *reference to it*. So you don't need, or want, the FCC syntax here - that would create a closure which, whenever invoked, executes the static method "current" on class "Closure". What you want is to call the Closure::current (or getCurrent) method directly, which will give you the existing closure, known as $a in the outer scope. Once you have a reference to it, you can pass it around and execute it wherever you want. $aOutside = function (int $foo) use (&$aOutside) { // Points to the same object as if you used by-ref assert($aOutside === Closure::getCurrent()); // Store it wherever you like $aInside = Closure::getCurrent(); assert($aInside === $aOutside); // Call it like you would any callable $aOutside(42); $aInside(42); Closure::getCurrent()(42); // note the two sets of parens // Capture it into another closure $bOutside = function() use ($aInside) { // Get a self-reference in that one too $bInside = Closure::getCurrent(); // Do whatever you like with $aInside and $bInside }; }; Rowan Tommins [IMSoP]