Rya*_*yan 15 php string string-interpolation
PHP支持双引号字符串中的变量插值,例如
$s = "foo $bar";
Run Code Online (Sandbox Code Playgroud)
但是有可能在双引号字符串中插入函数调用结果吗?
例如
$s = "foo {bar()}";
Run Code Online (Sandbox Code Playgroud)
那样的东西?似乎不可能吧?
jer*_*boy 20
绝对可以使用字符串到函数名称调用技术,如Overv的答案所示.在许多琐碎的替换案例中,它的读取远远好于替代语法,例如
"<input value='<?php echo 1 + 1 + foo() / bar(); ?>' />"
Run Code Online (Sandbox Code Playgroud)
你需要一个变量,因为解析器期望$在那里.这就是身份转换作为语法黑客行为的好地方.只需声明一个标识函数,并将名称赋给范围内的变量:
function identity($arg){return $arg;}
$interpolate="identity";
Run Code Online (Sandbox Code Playgroud)
然后,您可以传递任何有效的PHP表达式作为函数参数:
"<input value='{$interpolate(1 + 1 + foo() / bar() )}' />"
Run Code Online (Sandbox Code Playgroud)
好处是你可以消除很多琐碎的局部变量和echo语句.
缺点是$ interpolate变量超出了范围,因此您必须在函数和方法中重复声明它是全局的.
PHP 中的双引号功能不会评估 PHP 代码,它只是将变量替换为其值。如果你想动态地实际评估 PHP 代码(非常危险),你应该使用eval:
eval( "function foo() { bar() }" );
Run Code Online (Sandbox Code Playgroud)
或者,如果您只想创建一个函数:
$foo = create_function( "", "bar()" );
$foo();
Run Code Online (Sandbox Code Playgroud)
仅当确实没有其他选择时才使用此选项。