Edit report at https://bugs.php.net/bug.php?id=70087&edit=1
ID: 70087
Updated by: cmb@php.net
Reported by: mario dot dweller at seznam dot cz
Summary: Better string interpolation
-Status: Open
+Status: Suspended
Type: Feature/Change Request
Package: Strings related
PHP Version: 7.0.0beta1
Block user comment: N
Private report: N
New Comment:
This feature would require to think about edge cases[1] and
generally discussion for which this bug tracker isn't apt.
Anybody who is interested in this may pursue the RFC process[2].
For the time being, I suspend this ticket.
[1] <https://externals.io/message/111519>
[2] <https://wiki.php.net/rfc/howto>
Previous Comments:
------------------------------------------------------------------------
[2020-07-13 05:19:06] vovan-ve at yandex dot ru
A good idea is needed here. Supposed syntax "{$(expr)}" is complicated in
reading and writing.
It would be great feature. Take a look at JavaScript's template strings:
```js
const s = foolorem ${bar(x)} ipsum ${2 + 3} dolor;
```
Many other progressive languages has unified interpolation syntax for arbitrary expression.
I'm observing your RFC's <https://wiki.php.net/rfc> for more than 10 years. Lot's
of good things were declined like it was just conservative. Any good feature will be declined and
forgotten when you hit your own internal implementation problems and conservative views.
------------------------------------------------------------------------
[2015-07-17 16:58:32] chrisdmiddleton at gmail dot com
Never mind my previous question about function calls in variable interpolation. To answer my own
question, I see that it is documented in the manual.
------------------------------------------------------------------------
[2015-07-17 16:51:47] chrisdmiddleton at gmail dot com
I would also really like this feature, thanks Mario for bringing it up. In Mario's proposal, we
would have to have a BC break, but here's a way that we could do it without a BC break. The
following currently gives a parse error:
echo "{$(time())}";
(Parse error: syntax error, unexpected '(', expecting variable ...)
So it could be implemented that arbitrary expressions would be allowed inside parentheses like that.
On a side note, I've found some very odd behavior in PHP 5.6.10, where I can use a function
call inside variable interpolation, at least in a somewhat limited way. Is this documented
behavior??
<?php
function foo () {
echo "really";
}
echo "${foo()}"; // prints "really"
------------------------------------------------------------------------
[2015-07-16 11:52:57] mario dot dweller at seznam dot cz
Description:
------------
There is a support for variable interpolation in strings like
$string = "$a/$b $c";
or
$string = "{$a}/{$b} {$c}";
But it is not usable for functions.
$string = "Length: {strlen($a)}";
I guess that's why many programmers prefer using sprintf instead because it is more readable
than concatenation using dots. I personally use sprintf almost everywhere because the code looks
more consistent then.
Since there are many cool new features in PHP7, why not to add this basic one?
I guess it would need a special syntax because of BC, or not?
But there are currently two ways to achieve the same thing:
$string = "Hello {$a}";$string = "Hello ${a}";
The second one looks unnaturally, most prefer the first way. For example it could be forbidden in
favor of this:
$string = "Length is ${strlen(a)}";
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=70087&edit=1