Hi internals

> I've been thinking about ways to improve string interpolation.

Absolutely overwhelmed by the feedback (:P) I've decided to create a small POC:
https://github.com/php/php-src/compare/master...iluuu1994:string-interpolation

The POC uses the following syntax:
echo "Static method call: #{Foo::bar()}";

Two questions arose:

1. String prefix

To mitigate the BC break we could require strings that use the new
interpolation to be prefixed.

// Continues behaving the same
echo "#{Foo::bar()}";
// Actually makes use of the new interpolation
echo $"#{Foo::bar()}";

The main downside is that we have yet another type of string: Simple
quotes with no interpolation, double quotes with *some* interpolation
and fully interpolated strings ($""), each one with their heredoc
counterpart. It's unfortunate but we might prefer this approach to
mitigate the BC break.

Let me know if you prefer a prefix or no prefix. If the answers are
inconclusive this might become a secondary vote in the RFC.

2. Escaping

It's not quite obvious how escaping should behave.

$foo = 'foo';
echo "\#{$foo}";

// Could print
//> 1. #foo
// or
//> 2. #{$foo}"

We could 1. make the backslash escape just the hash and interpret
{$foo} as usual, or 2. make it escape both.

* Option 1 is more consistent with the rest of the language, backslash
normally just escapes the next character
* Option 1 requires two backslashes when result 2 is desired ("\#{\$foo}")
* Option 2 makes it impossible to achieve result 1 with just braces
and would have to be written as "\##{$foo}"

Let me know which option makes more sense to you.

Ilija

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

Reply via email to