On Fri, 15 Mar 2019 at 10:10, Nikita Popov <nikita....@gmail.com> wrote:

> It might be worth giving some consideration to the possibility of
> introducing this syntax already in this RFC. The main problem with punting
> this off for later is that it may be necessary to refactor closures between
> the short and the long form regularly: You need an extra statement in the
> closure? You have to switch closure types, and also not forget to write our
> the use() list this time.
>


I know I'm not necessarily in the majority, here, but to me, that's a
feature not a bug: short closures should not be a replacement for every
anonymous function, they should be for those cases where you have a really
simple expression. At some point, you should be saying "this is now too
long for a short closure, it needs a clearer definition", and "more than
one expression or statement" is as good a heuristic for that as you're
likely to get.

I also have strong reservations about generalising automatic binding to
full function bodies, because it fundamentally changes the way variable
scope works in the language: right now, $foo is always local to a function,
unless *explicitly* listed as a parameter, imported with "global", or
captured with "use". That's a lot simpler than the scoping rules of a lot
of other languages, and it's a guarantee we shouldn't break lightly.

I'm willing to be convinced - or simply "out-voted" - on these points, but
I think they deserve their own discussion. I was shot down on chat the
other day for a naive remark that capturing a large number of variables in
a closure would be "doing it wrong"; I'd love to see examples of where this
is useful / necessary, and a new RFC would be the perfect place for someone
to put those.

That could mean another RFC proposed immediately after this one passes, and
the feature arriving in the same PHP version, but I don't think we need to
merge the two discussions - as long as we keep the possibility in mind when
choosing a base syntax.

Regards,
-- 
Rowan Collins
[IMSoP]

Reply via email to