Интерпретация строковых данных (хочу вставить не переменную, а функцию)

ilin

Новичок
Интерпретация строковых данных (хочу вставить не переменную, а функцию)

Известно, что внутри строковых данных, ограниченных двойными кавычками или heredoc-символами, можно использовать переменные, элементы массивов и свойства объектов. Интерпретатор распознает их по символу $.
А функции? Возможен ли трюк, позволяющий вызвать функцию изнутри строки?

Пробую так:
PHP:
//Переменная-функция (Variable function)
$func = 'foo';

//Фигурные скобки ("сложный синтаксис") нужны, чтоб интерпретировался
//не только идентификатор, но и список параметров функции
echo "text1 {$func(44)} text2";

function foo($id) 
  {
  echo "foo($id)";
  }
Функция вызывается, но вопреки ожидаемой вставке МЕЖДУ двумя блоками текста, вставка происходит ПЕРЕД текстом.
output:
foo(44)text1 text2

Как же вставить в желаемое место?
 

Dl

Новичок
Ну если ты хочешь использовать результат выполнения функции, то он соответственно должен возвращаться.
 

Фанат

oncle terrible
Команда форума
Хехе. А в таком варианте оно не подойдет для крутой системы шаблонизации =)

Возможен ли трюк, позволяющий вызвать функцию
ответ на этот вопрос следует смотреть в документации.

-~{}~ 17.10.08 09:32:

боже, она не только в строку впихивается, но еще и переменная.
 

Ravanger

Новичок
ппц, умеют же извращаться люди :)

я может не совсем понял, что ты хотел сделать, могу лишь предположить что

PHP:
$var  = 44;

function foo($somevar) {
    return 'returning 2 u ' . $somevar;
}

echo ' it test ' .  foo($var) . '. Yo!';
 

ilin

Новичок
Вопрос закрыт.

Dl, большое спасибо!
Дело действительно лишь в использовании echo вместо return.
Теперь трюк работает:
PHP:
$func = 'foo';

echo "text1 {$func(44)} text2";

function foo($id) 
  {
  return "foo($id)";
  }
Результат функции вставляется между блоками текста.
output:
text1 foo(44) text2

Как правильно заметил Фaнат, код предназначен для шаблонизации.

Я не сразу нашел в php-документации ответ насчет корректности такого трюка. Потому что в русской документации вижу только такой пример:
PHP:
echo "Это значение переменной по имени $name: {${$name}}";
Сейчас смотрю английскую документацию, параграф
Types => Strings => Variable parsing => Complex (curly) syntax
Там всё подробней!

Во-первых,
Note: Functions and method calls inside {$} work since PHP 5.
Во-вторых, есть еще два примера с вложенными скобками {}
PHP:
echo "This is the value of the var named by the return value of getName(): {${getName()}}";

echo "This is the value of the var named by the return value of \$object->getName(): {${$object->getName()}}";
Глядя на эти примеры, подозреваю, что мой код возможно записать иначе, обойтись без переменной-функции? Но пока не понимаю, как?
 
Сверху