> As a C++ developer, I have no inherent problems with this **in > theory**, but I agree with your statement that it's a bit symbolic > soupish. I also suspect that we'll run into grammar ambiguities. > Imagine: [ []($x) => $x ]. This is current legal syntax (at the > point of compilation) because it *could* be interpreted as an array > with a single element (value $x) who's key is the result of calling a > function defined by an empty array passing a single arg ($x). It's > invalid at runtime (See: https://3v4l.org/IcK3B ), but that means > special casing our way around the ambiguities.
I already mentioned the changed behavior. What you've indicated here is not a special case of that same behavior since `[]($x)` would be prefix to an arrow function which binds the arrow to the closure and not the array. > Further, if we're going to follow the C++ model, we'd be well suited > to allow explicit per-var by-val/by-ref syntax, e.g.: > > [$foo, $bar]() => $foo * $bar > > Again, this is legal syntax to the parser, but now it's even > potentially current legal syntax to the runtime (assuming > is_callable([$foo, $bar]). You would do: [=, $foo, $bar]() => $foo * $bar if you really wanted to bind everything explicitly. I haven't written a full description in my previous thread but it's all doable except I'd want to verify the grammar disambiguation with an empty `[]` specifically. -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php