On Wed, Mar 15, 2023 at 8:38 AM Rowan Tommins <rowan.coll...@gmail.com> wrote:
>
> On 15 March 2023 03:28:39 GMT, "Alexandru Pătrănescu" <dreal...@gmail.com> 
> wrote:
>
> >How about first implementing use() for anonymous classes first?
> >Something like:
> >
> >function foo(int $outer) {
> >     return new class() use($outer) {
> >         public function getIt() {
> >             return $outer;
> >         }
> >     };
> >}
>
>
> I think it's a lot less clear exactly where the variable is being imported to 
> that way. Would you still be able to overwrite $outer as a normal local 
> variable in that function scope? Would it return to its captured value every 
> time the function runs? It's different from capturing into a function, 
> because you're not just adding a variable to a single existing scope.
>
> Just allowing the captured var for property initialisation would be less 
> ambiguous, but having to list it in use() and then in the property list would 
> be the same amount of code as you can currently get to with constructor 
> promotion (see my first example in the thread).
>
> From what Ilija has pointed out, the implementation of actually getting the 
> values into the right place is going to be harder than handling the syntax 
> anyway. My current feeling is that if it's possible at all, it will end up as 
> a shorthand for that constructor example: declaring normal properties, and 
> populating them as the instance is initialised.
>
> Regards,
>
> --
> Rowan Tommins
> [IMSoP]
>
> --
> PHP Internals - PHP Runtime Development Mailing List
> To unsubscribe, visit: https://www.php.net/unsub.php
>

> The outer variable would be captured by value, and carried around with
> the instance, like existing closures.

For what its worth, there are ways to get references inside values:

https://3v4l.org/5q93F

Other than pointing that out, I like it.

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: https://www.php.net/unsub.php

Reply via email to