On Mon, Jun 13, 2022 at 11:36 AM Arnaud Le Blanc <arnaud...@gmail.com> wrote: > > On dimanche 12 juin 2022 19:54:06 CEST Mark Baker wrote: > > Did many of those closures use "pass by reference" in the use clause, > > because that's one real differentiator between traditional closures and > > short lambdas. There's also the fact that use values are bound at the > > point where the closure is defined, not where it's called (if they even > > exist at all at that point), although that's probably more difficult to > > determine. > > Please note that auto-capture binds variables at function declaration. This is > the case in Arrow Functions, and is inherited by this RFC. > > -- > PHP Internals - PHP Runtime Development Mailing List > To unsubscribe, visit: https://www.php.net/unsub.php >
>From a maintainer and code review aspect, I prefer the longer syntax because it is 100% clear on which variables are being closed over and utilized in the anonymous function. fn($x) => $x + $y is pretty clear that $y is being pulled in from an outer scope but if you start getting into longer ones, it can get non-obvious pretty quickly... $func = fn($x) { $y[] = $x; // do some stuff return $y; } If $y is pulled from the outside scope, it may or may not be intentional but hopefully, it is an array. If anyone uses the name $y outside the lambda, this code may subtly break. That being said, I'd love this RFC broken into two RFCs, one for generic auto-capturing and one for multi-line fn functions (just to reduce some typing when refactoring). There are times when auto-capturing can be useful for all lambdas, especially when writing some custom middleware. -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: https://www.php.net/unsub.php