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/


Reply via email to