Hi Ilija,

On 14/08/2020 17:14, Ilija Tovilo wrote:
I've been thinking about ways to improve string interpolation. String
interpolation in PHP is currently pretty limited to say the least.


Thanks for putting together some thoughts on this.

My instinct is that rather than having a whole new syntax that's basically a tweak on "${expression}", we could take the opportunity to bring more features into the mix. If you think about it, string interpolation is basically an inline template syntax, so a lot of the features that are useful in template engines would be useful there.

Specifically:

1) modifiers; e.g. sprintf-style, f"Measure #0.2f{$value}" or template-style, f"Hello #{$name|escape}"

2) custom rules, like JavaScript's tagged templates [1], e.g. html"Hello #{$name}" == "Hello " . htmlspecialchars($name)


Put these together, and you can have variables escaped by default, and opted out via a modifier:

$tag = 'h1';
echo html"<#raw{$tag}>Hello #{$_GET['name']}</#raw{$tag}>";


If we took JS tagged templates as the inspiration, that would de-sugar to something like:

echo render_html_string(
    stringParts: [ '<', '>Hello ', '</', '>' ],
    expressions: [ $tag, $_GET['name'], $tag ],
    modifiers: [ ['raw'], [], ['raw'] ]
);


It will take a while to figure out the details, but I think a powerful feature like this is more worthy of adding new syntax.


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

Regards,

--
Rowan Tommins (né Collins)
[IMSoP]

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

Reply via email to