PHP interpolating string for function output

Ryan picture Ryan · May 25, 2012 · Viewed 14.5k times · Source

PHP supports variable interpolation in double quoted strings, for example,

$s = "foo $bar";

But is it possible to interpolate function call results in the double quoted string?

For example,

$s = "foo {bar()}";

Something like that? It doesn't seem not possible, right?

Answer

jerseyboy picture jerseyboy · Mar 14, 2013

It is absolutely possible using the string-to-function-name calling technique as Overv's answer indicates. In many trivial substitution cases it reads far better than the alternative syntaxes such as

"<input value='<?php echo 1 + 1 + foo() / bar(); ?>' />"

You need a variable, because the parser expects the $ to be there.

This is where the identity transform works well as a syntactic hack. Just declare an identity function, and assign the name to a variable in scope:

function identity($arg){return $arg;}
$interpolate = "identity";

Then you can pass any valid PHP expression as the function argument:

"<input value='{$interpolate(1 + 1 + foo() / bar() )}' />"

The upside is that you can eliminate a lot of trivial local variables and echo statements.

The downside is that the $interpolate variable falls out of scope, so you would have to repeatedly declare it global inside of functions and methods.