Re: RFC: Support Closures in constant expressions
| From: | Larry Garfield | Date: | Thu, 31 Oct 2024 06:16:06 +0000 |
| Subject: | Re: RFC: Support Closures in constant expressions | ||
| References: | 1 2 3 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-125882@lists.php.net to get a copy of this message | ||
On Wed, Oct 30, 2024, at 3:01 AM, Tim Düsterhus wrote:
> Hi
>
> Am 2024-10-30 05:25, schrieb Larry Garfield:
>> This seems like a good idea to me. My only real question is why we
>> need to forbid short-closures. I fully agree that capturing variables
>> for such functions doesn't work. What I don't understand is why that
>> precludes short-closures. Is it not possible to "just" say "there's
>> nothing to even capture in this context, don't try"? (There may be
>> technical reasons for that, but I do not know what they are and the RFC
>> doesn't say.)
>
> It would indeed require some special handling to disable the
> auto-capturing in the code. This would be solvable of course, but
> there's also semantic ambiguity, because users reasonably expect short
> closures to perform auto-capturing:
>
> <?php
>
> $foo = 'foo';
>
> const Closure = static fn (array $bar): array => [$foo, $bar];
>
> var_dump((Closure)('bar'));
>
> If this would be legal syntax: What would you expect to be printed?
>
> Best regards
> Tim Düsterhus
Hm. It would never occur to me to use a function for a non-class constant in the first place, so I
don't know. :-) Frankly I can't recall the last time I used a non-class constant period.
:-)
That said, PHP consts are already a bit squishy, and auto-capture is always by value. That
wouldn't give us a loophole?
If it cannot reasonably be done now, but is possible, that should be listed in future scope with
roughly what it would take for a follow-up to do. (And then we can argue if it should just be done
now, with more information as to how much work that is.)
--Larry Garfield