Я попытался вызвать 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();");