用于函数输出的PHP插值字符串

时间:2012-05-25 17:01:40

标签: php string string-interpolation

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

$s = "foo $bar";

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

e.g。

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

那样的东西?似乎不可能吧?

3 个答案:

答案 0 :(得分:19)

完全可以使用字符串到函数名称调用技术,如Overv的答案所示。在许多琐碎的替换案例中,它比其他语法(如

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

你需要一个变量,因为解析器期望$在那里。 这就是身份转换作为语法黑客行为的好地方。 只需声明一个标识函数,并将名称分配给范围内的变量:

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

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

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

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

缺点是$ interpolate变量超出了范围,所以你必须在函数和方法中重复声明它是全局的。

答案 1 :(得分:1)

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

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

或者,如果您只想创建一个功能:

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

如果没有其他选择,请仅使用此项。

答案 2 :(得分:0)

除非插值是绝对必要的(请注释并让我知道原因),将函数输出与字符串连接。

uniqueness

来源:http://docstore.mik.ua/orelly/webprog/pcook/ch01_08.htm