Hi Peter

On Sun, May 19, 2024 at 10:30 AM Peter Stalman <sarke...@gmail.com> wrote:
>
> echo " {A::$static_property} \n"; // doesn't work (unless $static_property is 
> a variable)
> echo " {$a::$static_property} \n"; // works
>
> echo " {A::static_method()} \n"; // doesn't work (just text)
> echo " {$a::static_method()} \n"; // works
>
> echo " {A::constant} \n"; // doesn't work
> echo " {$a::constant} \n"; // doesn't work either, but why?

It would be straightforward to allow all expressions that start with a
`$` in string interpolation, as I've noticed a couple of years ago
[1]. This restriction seems rather arbitrary.

I think I held off proposing this because I was planning on proposing
a more complete form of string interpolation [2]. However, the
backwards-compatible syntax was largely disliked, so I withdrew the
RFC.

I wasn't particularly fond of introducing more forms of strings (e.g.
$"", f"", etc.) to avoid the BC break, because there are already
plentiful:

* ''
* ""
* `` (yes, these allow interpolation)
* <<<HD ... HD
* <<<'HD' ... HD

Adding at least the two expected ones ($"" and $<<<HD ... HD) would
bump that up to 7 forms.

There were also suggestions to extend strings in a more generic way,
akin to JavaScripts template strings [3], but I didn't have any use
for this myself.

Ilija

[1] 
https://github.com/php/php-src/compare/master...iluuu1994:php-src:lift-variable-restriction-for-brace-dollar-string-interpolation

[2] https://wiki.php.net/rfc/arbitrary_string_interpolation

[3] 
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals

Reply via email to