Hey Larry,

On Thu, 9 Jun 2022 at 18:34, Larry Garfield <la...@garfieldtech.com> wrote:

> Last year, Nuno Maduro and I put together an RFC for combining the
> multi-line capabilities of long-closures with the auto-capture compactness
> of short-closures.  That RFC didn't fully go to completion due to concerns
> over the performance impact, which Nuno and I didn't have bandwidth to
> resolve.
>
> Arnaud Le Blanc has now picked up the flag with an improved implementation
> that includes benchmarks showing an effectively net-zero performance
> impact, aka, good news as it avoids over-capturing.
>
> The RFC has therefore been overhauled accordingly and is now ready for
> consideration.
>
> https://wiki.php.net/rfc/auto-capture-closure
>

Couple questions:

## nesting these functions within each other

What happens when/if we nest these functions? Take this minimal example:

```php
$a = 'hello world';

(fn () {
    (fn () {
        echo $a;
    })();
})();
```

## capturing `$this`

In the past (also present), I had to type `static fn () => ...` or `static
function () { ...` all over the place, to avoid implicitly binding `$this`
to a closure, causing hidden memory leaks.

Assuming following:

 * these new closures could capture `$this` automatically, once detected
 * these new closures can optimize away unnecessary variables that aren't
captured

Would that allow us to get rid of `static fn () {` declarations, when
creating one of these closures in an instance method context?

Greets,

Marco Pivetta

https://twitter.com/Ocramius

https://ocramius.github.io/

Reply via email to