Is that possible to expand function call in PHP string?
我试着在这样的字符串中调用
1 2 3 4 5 | echo"This is a ${foo()} car"; function foo() { return"blue"; } |
但是,它最终会出现语法错误。
我在这里发现了一些类似的东西,但并不完全是我需要的:
1 | echo"This is the value of the var named by the return value of getName(): {${getName()}}"; |
号
可以这样做吗?
有可能吗?不。
Functions, method calls, static class variables, and class constants inside {$} work since
PHP 5. However, the value accessed will be interpreted as the name of a variable in the
scope in which the string is defined. Using single curly braces ({}) will not work for
accessing the return values of functions or methods or the values of class constants or
static class variables.
号
这是http://www.php.net/manual/en/language.types.string.php language.types.string.parsing.complex上关于卷曲语法的第一个注释。
不是那样的,不是…你可以:
1 | echo"$(" . foo() .");"; |
。
不,据我所知,你只能做到:
1 2 3 4 5 | echo"hello".foo(); function foo() { return"world"; } |
在您的示例中,这将起作用:
1 2 3 4 5 6 7 8 9 10 | $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 |
号
是的,这是可能的。
1 2 3 4 5 6 7 | $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代码进行计算。这样就可以直接调用字符串中的几乎任何函数。
您给出的示例:
1 2 | function foo() {return"hello";} echo"${foo()}"; |
。
这个例子不起作用,因为使用php的
在您的示例中,
要了解它为什么不起作用,我们需要修改示例:
1 2 3 | function foo() {return"hello";} $hello="world"; echo"${foo()}"; |
。
此程序将打印
如果您希望获得一个程序来打印您的示例中的
将
1 2 3 4 5 | echo '$' . foo(); function foo() { return"hello"; } |
印刷品:
你也可以这样做:
echo foo();
$语法类似于shell命令替换,对于php,您可以使用eval,http://php.net/eval
但请注意,Eval是邪恶的…你必须确定你知道你把什么传给埃瓦尔。
这样称呼它:
1 |