24

PHP 支持在双引号字符串中进行变量插值,例如,

$s = "foo $bar";

但是是否可以在双引号字符串中插入函数调用结果?

例如,

$s = "foo {bar()}";

类似的东西?这似乎不可能,对吧?

4

3 回答 3

25

正如Overv 的回答所表明的那样,使用字符串到函数名调用技术是绝对可能的。在许多琐碎的替换情况下,它的阅读效果远好于替代语法,例如

"<input value='<?php echo 1 + 1 + foo() / bar(); ?>' />"

您需要一个变量,因为解析器希望 $ 存在。

这就是身份转换作为句法技巧发挥作用的地方。只需声明一个标识函数,并将名称分配给范围内的变量:

function identity($arg){return $arg;}
$interpolate = "identity";

然后您可以将任何有效的 PHP 表达式作为函数参数传递:

"<input value='{$interpolate(1 + 1 + foo() / bar() )}' />"

好处是可以消除很多琐碎的局部变量和回显语句。

缺点是 $interpolate 变量超出了范围,因此您必须在函数和方法内部反复声明它是全局的。

于 2013-03-14T13:21:33.167 回答
5

PHP 中的双引号功能不会评估 PHP 代码,它只是将变量替换为它们的值。如果您想实际动态评估 PHP 代码(非常危险),您应该使用eval

eval( "function foo() { bar() }" );

或者,如果您只想创建一个函数:

$foo = create_function( "", "bar()" );
$foo();

只有在没有其他选择的情况下才使用它。

于 2012-05-25T17:05:01.817 回答
0

除非绝对需要插值(请评论并告诉我原因),否则将函数输出与字符串连接起来。

$s =  "foo " . bar();

资料来源:1.8。在字符串中插入函数和表达式

于 2017-02-02T21:51:38.927 回答