On Thu, 07 May 2026 15:19:01 +0000, Alex Rock wrote:
 > Thanks for this RFC, here are my 2cents:
 >
 > I think the current syntax is too close to current short closures, and
 > since it allows multiline closures, it would imply that by default all
 > multiline short closures are scoped, which is not intuitive since
 > traditional closures don't capture by default.
 > Instead, I think replacing the `fn () { }`  syntax to add a keyboard
 > indicating it inherits the scope would drastically help making it more
 > intuitive.
 >
 > I would imagine instead something like this:
 >
 >     $externalVar = 0;
 >     $closure1 = scoped fn () => $newVar1 = $externalVar++;
 >     $closure2 = scoped function () {
 >         return $newVar2 = $externalVar++;
 >     };
 >     $closure1();
 >     $closure2();
 >     var_dump($newVar1); // int(0)
 >     var_dump($newVar2); // int(1)
 >     var_dump($externalVar); // int(2)
 >
 > This way, for the first case, the only new information that `scoped`
 > brings is the potential existence of `$newVar1` after the closure's
 > execution, and for the second closure, it makes it explicit that all
 > variables in the closure's body are shared with the parent scope.
 >
 > WDYT?
 >
 > Le 06/05/2026 à 22:09, Bob Weinand a écrit :
 > > Volker and I drafted a RFC:
 > >
 > > https://wiki.php.net/rfc/scope-functions
 > >
 > > Please consider it and share your feedback.
 > >
 > > I hope it will alleviate pain around some of the most common forms of
 > > Closure usage which is "execute this now as part of the called
 > > function", which currently can require a lot of "use ($variables)".
 > >
 > > For me the primary use case of use ($capturing) was always "I need
 > > this function later and want to explicitly document what escapes my
 > > function". This, however, required this straightforward usage of
 > > Closures to also document every single usage of a variable. Which is
 > > really not that beneficial at all.
 > >
 > > Thus the scope functions as proposed will be able to fill that gap in
 > > future.
 > >
 > > Thank you,
 > > Bob

I agree that the new syntax is too close to current short closures.

I don't think we need a new keyword though, I think the presence of `=>` 
in the function definition should indicate that scope is captured, like 
this:

```
function() => {
     // ...
}
```

To put it another way `fn() => foo;` would be a syntactically identical 
version of `function() => {return foo;}`

Reply via email to