用于函数输出的 PHP 插值字符串
2022-08-30 17:13:25
PHP 支持双引号字符串中的变量插值,例如,
$s = "foo $bar";
但是是否可以在双引号字符串中插入函数调用结果?
例如
$s = "foo {bar()}";
类似的东西?这似乎是不可能的,对吧?
PHP 支持双引号字符串中的变量插值,例如,
$s = "foo $bar";
但是是否可以在双引号字符串中插入函数调用结果?
例如
$s = "foo {bar()}";
类似的东西?这似乎是不可能的,对吧?
使用字符串到函数名称调用技术是绝对可能的,正如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变量超出范围,因此您必须在函数和方法中反复声明它是全局的。
PHP 中的双引号功能不计算 PHP 代码,它只是将变量替换为其值。如果你想实际动态评估PHP代码(非常危险),你应该使用:eval
eval( "function foo() { bar() }" );
或者,如果您只想创建一个函数:
$foo = create_function( "", "bar()" );
$foo();
仅当确实没有其他选择时才使用它。