如何手动插入字符串?

时间:2014-07-23 13:40:20

标签: php string-interpolation

我发现插入字符串的唯一方法(I.E.扩展其中的变量)如下:

$str = 'This is a $a';
$a = 'test';
echo eval('return "' . $str . '";');

请注意,在现实生活中,字符串是在不同的地方创建的,因此我无法用'替换" s。

有没有更好的方法来扩展单引号字符串而不使用eval()?我正在寻找PHP本身提供的东西。

请注意:使用strtr()就像使用sprintf()之类的东西。我的问题与此问题的可能重复部分中链接的问题不同,因为我让字符串控制它想要获取内容的方式(I.E.通过什么函数调用或属性访问器)。

3 个答案:

答案 0 :(得分:4)

在字符串中替换占位符的PHP字符串文字语法有更多机制!一个非常常见的是sprintf

$str = 'This is a %s';
$a   = 'test';
echo sprintf($str, $a);

http://php.net/sprintf

ton 其他或多或少专门的模板语言。选择你最喜欢的那个。

答案 1 :(得分:0)

您听说过strtr()吗? http://php.net/manual/en/function.strtr.php

它可以达到这个目的,对于从数据库中创建包含信息的动态html非常有用

给出以下字符串:

$str = 'here is some text to greet user {zUserName}';

然后您可以使用strtr()解析它:

$userName = 'Mike';
$parsed = strtr($str,array('{zUserName}'=>$userName));
echo $parsed; // outputs: 'here is some text to greet user Mike'

虽然某些regards上的sprintf速度更快,但strtr允许您以更友好的方式控制哪些内容(sprintf在非常长的字符串上无法管理包含一百个占位符需要替换)

答案 2 :(得分:-1)

这是一个可能的解决方案,在您的特定情况下不确定这是否适合您,但它肯定会减少对这么多单引号和双引号的需求。

<?php
class a {
    function b() {
        return "World";
    }
}
$c = new a;
echo eval('Hello {$c->b()}.');
?>