Hi everyone, thanks for the feedback! I'll be responding to everyone
in the same e-mail to minimize noise.

---

Hi Rowan

> I presume the intent here is that the engine will generate an
> E_DEPRECATED each time such a string is encountered. Do you know yet if
> that will be easy to implement? I think some simple string handling is
> built into the parser, so there may not be a single code path to look at.

I created an implementation just now to answer this question. Luckily
there is a single code path and it was easy to implement.
https://github.com/php/php-src/compare/master...iluuu1994:deprecate-dollar-curly-encaps-var?expand=1

> The other question which I'm sure lots of users will have when they see
> the deprecation is: How easy is it to adapt usages of the deprecated
> syntax to use the non-deprecated variants? I'm guessing it's not as
> simple as moving the $ sign, because as you point out the syntaxes have
> different semantics; is there a general rule that users and/or tools can
> use to generate correct replacements?

For option 3, it is as simple as moving the $ sign. It supports just two forms:

* `"${foo}"` -> `"{$foo}"`
* `"${foo[expr]}"` -> `"{$foo[expr]}"`

As for option 4, it can also be transformed to 2 but requires
additional curly braces.

* `"${expr}"` -> `"{${expr}}"`

I have not intended to create a migration tool so far but that's
something worth considering.

> A final thought is that I seem to remember a previous thread (from
> Nikita?) about the "$foo[bar]" syntax, which is also confusing. Maybe we
> should consider deprecating that at the same time?

I agree that the inconsistent syntax is unfortunate. In this case at
least it's more concise so it has some justification for being there.

> @Ilija It might be worth adding the above example to the RFC , to show that 
> "Option 2" can actually do
> everything that the other options do and more.

Absolutely, I will do that.

---

Hi BohwaZ

> The 4th one is very useful.
>
> $v = ${'param_' . $name};

Like Rowan mentioned, the RFC does not propose to deprecate variable
variables, just variable variables as a form of string interpolation.
You'll still be able to use variable variables, even in strings, like
noted above, just as form 2.

---

Hi Andreas

> First of all it would make it much easier for me to see what impact this
> RFC has if there were any numbers in it of how many large-scale
> repositories on for example github are affected by this.

You're absolutely right. I will attempt to gather some numbers. For
option 3, I also think "not widely used" is just plain wrong. As for
option 4, I'm fairly confident it only exists by accident 95% of the
time.

> But on the other hand, and that's much more important to me, I am
> missing the part where you explain the concrete benefits of that
> deprecation for the evolution of the language.

Basically, I was planning on suggesting more powerful string
interpolation in 2020, what the RFC refers to as future scope. But
with there already being 4 different types of syntax I was afraid of
adding fuel to the fire and decided to clean up the existing syntax
first. It's not a technical problem, just a usability problem.

> at least for me - as long as something is not in the way of a new
> feature or a strategy we leave it as it is.

I think this comes down to personal opinion. IMO this mindset hinders
progress. Removing a feature from the language takes many years, which
is why I believe it's essential to remove the baggage every once in a
while. There are other languages that attempt to keep perfect backward
compatibility and they are universally criticized for being
complicated and confusing. There's no single one argument I can
provide here as this comes down to your personal view on where the
language is going in the next decade.

Ilija

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

Reply via email to