我发现插入字符串(即扩展其中的变量)的唯一方法是:
$str = 'This is a $a';
$a = 'test';
echo eval('return "' . $str . '";');
请记住,在实际情况下,字符串是在不同的位置创建的,所以我不能只将'
替换为"
。
是否有更好的方法可以在不使用eval()的情况下扩展单引号字符串?我正在寻找PHP本身提供的东西。
请注意:使用strtr()就像使用sprintf()之类的东西。我的问题不同于该问题的可能重复部分中链接的问题,因为我让字符串控制它想要(即通过什么函数调用或属性访问器)获取内容的方式。
这里是一个可能的解决方案,不确定在您的特定情况下是否适合您,但是肯定会消除对这么多单引号和双引号的需要。
<?php
class a {
function b() {
return "World";
}
}
$c = new a;
echo eval('Hello {$c->b()}.');
?>
在字符串中替换占位符的机制比PHP字符串文字语法还多! sprintf
:
$str = 'This is a %s';
$a = 'test';
echo sprintf($str, $a);
有一个或多或少的其他[。选择最喜欢的一个。