PHP支持双引号字符串中的变量插值,例如
$s = "foo $bar";
但是可以在双引号字符串中插入函数调用结果吗?
e.g。
$s = "foo {bar()}";
那样的东西?似乎不可能吧?
答案 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