Возможно ли расширить функцию вызова функции в строке PHP?

Я попытался вызвать foo() внутри строки следующим образом:

 echo "This is a ${foo()} car"; function foo() { return "blue"; } 

но в результате получается синтаксическая ошибка.

Я нашел здесь нечто похожее, но не совсем то, что мне нужно:

 echo "This is the value of the var named by the return value of getName(): {${getName()}}"; 

Можно ли это сделать?

Является ли это возможным? Нет.

Функции, вызовы методов, статические переменные класса и константы класса внутри {$} работают с PHP 5. Однако доступное значение будет интерпретироваться как имя переменной в области, в которой определена строка. Использование отдельных фигурных скобок ({}) не будет работать для доступа к возвращаемым значениям функций или методов или значений констант класса или переменных статического класса.

Это первая заметка для фигурного синтаксиса на http://www.php.net/manual/en/language.types.string.php#language.types.string.parsing.complex .

Не так, нет … вы могли бы:

 echo "$(" . foo() . ");"; 

Нет, насколько я знаю, вы можете делать только:

 echo "hello ".foo(); function foo() { return "world"; } 

В вашем примере это будет работать:

 $name = "captaintokyo"; echo "This is the value of the var named by the return value of getName(): {${getName()}}"; function getName() { return "name"; } // Output: // This is the value of the var named by the return value of getName(): captaintokyo 

Да, это возможно.

 $func = function($param) { return $param; }; function foo($color) { return "$color car"; } echo "This is a {$func(foo('blue'))}<br/>"; $title = 'blue car'; echo "This is a {$func(str_replace('blue', 'red', $title))}<br/>"; 

$ func () будет вызываться как функция, а выражение в круглых скобках будет оцениваться как любой другой PHP-код. Таким образом, вы можете напрямую вызывать почти любую функцию внутри строки.

Вы также можете это сделать:

echo foo ();

Оберните $ в одинарные кавычки, чтобы он не был для меня буквальным, и используйте конкатенацию, чтобы добавить значение foo

 echo '$' . foo(); function foo() { return "hello"; } 

prints: $hello

Пример, который вы дали:

 function foo() {return "hello";} echo "${foo()}"; 

Этот пример не будет работать, потому что использование функций в формате PHP {$} позволяет вам получить доступ к результату как имя переменной, а затем отобразить содержимое этой переменной.

В вашем примере оператор echo будет пытаться отобразить содержимое переменной с именем $hello .

Чтобы понять, почему он не работает, нам нужно изменить пример:

 function foo() {return "hello";} $hello="world"; echo "${foo()}"; 

Эта программа будет печатать world . Похоже, это то, что вы нашли во втором примере, который вы дали.

Если вы надеетесь получить программу, которая будет печатать hello в вашем примере, вы не сможете сделать это, используя эту технику. Однако хорошая новость заключается в том, что есть много гораздо более простых способов сделать это. Просто выделите возвращаемое значение функции.

Синтаксис $ {} выглядит как замена командной оболочки, для PHP вы можете использовать eval, http://php.net/eval

Но будьте предупреждены, что eval – это зло … Вы должны быть уверены, что знаете, что передаете на eval.

Назовите это так:

 <?php echo eval("foo();");