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