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/