PHP-интерполяция строки для вывода функции

PHP поддерживает переменную интерполяцию в двойных кавычках, например

$s = "foo $bar";

Но возможно ли интерполировать результаты вызова функции в строку с двойными кавычками?

например.

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

Что-то вроде этого? Кажется, это невозможно?

Ответ 1

Функция двойной кавычки в PHP не оценивает PHP-код, она просто заменяет переменные своими значениями. Если вы хотите реально оценить PHP-код динамически (очень опасно), вы должны использовать eval:

eval( "function foo() { bar() }" );

Или если вы просто хотите создать функцию:

$foo = create_function( "", "bar()" );
$foo();

Используйте это только в том случае, если другого варианта нет.

Ответ 2

Абсолютно возможно использование метода вызова типа "строка-к-функции", как указывает ответ "Overv". Во многих случаях тривиального замещения он читается намного лучше, чем альтернативные синтаксисы, такие как

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

Вам нужна переменная, потому что парсер ожидает, что $будет там. Здесь идентификатор tranform хорошо работает как синтаксический хак. Просто объявите функцию идентификации и назначьте имя переменной в области видимости:

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

Затем вы можете передать любое допустимое выражение PHP в качестве аргумента функции:

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

Положительный момент заключается в том, что вы можете устранить множество тривиальных локальных переменных и выражений эха.

Недостатком является то, что переменная $interpolate выпадает из области видимости, поэтому вам придется неоднократно объявлять ее глобально внутри функций и методов.

Ответ 3

Если интерполяция абсолютно необходима (прокомментируйте и сообщите мне, почему), объедините вывод функции со строкой.

$s = "foo " . bar();

Источник: http://docstore.mik.ua/orelly/webprog/pcook/ch01_08.htm