On Mon, 31 Mar 2025, Jorg Sowa wrote: > I thought about edge cases and what the desired output is with nested > closures? > > Example: > <? > $a = function (int $numberA) { > $b = function (int $numberB) { > if($numberB < 10) { > return Closure::current(10); > } > return $numberB; > }; > return $b($numberA) + $numberA; > }; > > var_dump($a(4));
I'd expect it to refer to current/local/nearest function. If you wanted a way to call $a from inside $b, I'd expect callable syntax to be able to capture these in-place. Eg: $a = function ($a) { $aFn = Closure::current(...); $aFn(4) === Closure::current(4); }; https://www.php.net/manual/en/functions.first_class_callable_syntax.php This could be use'd to a nested $b function, or otherwise passed/returned to other functions without changing meaning. That is, I would not expect it to behave like late-static binding where it'll always be for the "current" fn that's invoking it, but rather capture where the callable expression happened. -- Timo Tijhof, Wikimedia Foundation. https://timotijhof.net/