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();
$s = "foo {$this->bar()}";
- nawfal{}
是必需的。否则,PHP将寻找bar
属性。 - Fahmi