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