PHP支持双引号字符串中的变量插值,例如,功能输出的PHP插值字符串
$s = "foo $bar";
但是有可能插入函数调用结果在双引号字符串?
例如
$s = "foo {bar()}";
这样的事情?似乎不可能的权利?
PHP支持双引号字符串中的变量插值,例如,功能输出的PHP插值字符串
$s = "foo $bar";
但是有可能插入函数调用结果在双引号字符串?
例如
$s = "foo {bar()}";
这样的事情?似乎不可能的权利?
PHP中的双引号功能不评估PHP代码,它只是用它们的值替换变量。如果你想实际动态(很危险)评估的PHP代码,你应该使用eval
:
eval("function foo() { bar() }");
或者,如果你只是想创建一个函数:
$foo = create_function("", "bar()");
$foo();
只使用这个,如果真的有没有其他选择。
如果函数是在一个类中,那么你可以在字符串内引用它,例如:'$ s =“foo {$ this-> bar()}”;' – nawfal
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变量超出范围,所以你将不得不在函数和方法中重复声明它是全局的。
是的,它是不可能的。您只需尝试 – Ibu
即可得到答案您的意思是*内插*还是*解释*? – hakre