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() )}' />"
好处是可以消除很多琐碎的局部变量和回显语句。
缺点是 $interpolate 变量超出了范围,因此您必须在函数和方法内部反复声明它是全局的。
PHP 中的双引号功能不会评估 PHP 代码,它只是将变量替换为它们的值。如果您想实际动态评估 PHP 代码(非常危险),您应该使用eval
:
eval( "function foo() { bar() }" );
或者,如果您只想创建一个函数:
$foo = create_function( "", "bar()" );
$foo();
只有在没有其他选择的情况下才使用它。