Php 在字符串中执行函数

Php 在字符串中执行函数,php,Php,每个人都知道,在PHP中,您可以做到这一点: $m = "my string is {$string}"; 但是,taht是否也可以与函数一起使用呢?比如: $m = "my string is {getStringValue()}"; 仅展开变量名 如果我很清楚您想做什么,请使用串联: $m = "my string is {".getStringValue()."}"; 这是不可能的(而且它也不太可读,尤其是如果函数有参数的话) 您可以使用: {$..}中的字符串扩展超出了执行函数的范

每个人都知道,在PHP中,您可以做到这一点:

$m = "my string is {$string}";
但是,taht是否也可以与函数一起使用呢?比如:

$m = "my string is {getStringValue()}";

仅展开变量名

如果我很清楚您想做什么,请使用串联:

$m = "my string is {".getStringValue()."}";
这是不可能的(而且它也不太可读,尤其是如果函数有参数的话)

您可以使用:


{$..}
中的字符串扩展超出了执行函数的范围。例如,我使用了gettext。但你也可以使用这样的技巧:

$html = "htmlentities";    // any callback function
// or just: $html = function($s){ return $s; }

print "even allows expressions {$html(2+3*5+rand(2,17))} here";
这是可能的,因为PHP允许任何变量表达式,以支持简单对象表示法:

print "this isn't just a {$obj->prop} string variable";
例如,我正在使用一个实现ArrayAccess的对象,即使这是一个方法调用:

print "Makes some things {$_GET->ascii->html['input']} simpler";

我们有一些这样的主题,但就我的一生而言,我找不到一个好的参考…

字符串是字符串,函数是函数。你为什么要把一个放进另一个?我不完全同意。我认为它的可读性更高:
“string{func()}other string”
“string”.func()“other string”
当然,这是主观的,但我认为很容易犯这样的错误。根据我的经验,sprintf是解决这个问题最具可读性和可重用性的解决方案实际上不仅仅是变量名,而是变量表达式得到了扩展。这正好说明了PHP的功能有多强大,尤其是变量的
$
标记有多重要。相反,在注释中,您可以解释一下如何设置对象形式
$\u get
<代码>$\u GET->ascii?这是我使用的输入筛选器对象。这很酷,但是你必须在整个应用程序中使用它。它允许
$\u-GET->safe[“input”]
$\u-GET[“raw”]
访问,这使得保护传统应用程序非常有用。-但它还没有完成。它仍然在幕后使用filter_var。但是,例如filter_vars filter_VALIDATE_电子邮件在几个有效的电子邮件地址上失败。否则,filter_var是正常的。我只是不喜欢它,因为它使用起来更麻烦,而且提供的实用过滤器太少。
print "Makes some things {$_GET->ascii->html['input']} simpler";