str_replace意外行为

时间:2012-01-24 06:51:28

标签: php str-replace

我正在编写一个简单的模板系统,用于在服务器上运行动态查询。

我最初在我的模板类中有以下代码:

$output = file_get_contents($this->file);

foreach ($this->values as $key => $value) {
    $tagToReplace = "{$key}";
    $output = str_replace($tagToReplace, $value, $output);
}

我注意到字符串没有像我预期的那样被替换('{}'字符仍留在输出中。)

然后我将“违规”行更改为:

$tagToReplace = '{'."$key".'}';

然后按预期工作。为什么这种变化是必要的?解释字符串中的“{”在PHP中是否具有特殊意义?

2 个答案:

答案 0 :(得分:6)

是。使用双引号时,"{$key}""$key"是相同的。通常这样做可以扩展更复杂的变量,例如"My name is: {$user['name']}"

您可以使用单引号(如您所愿),转义大括号 - "\{$key\}" - 或将变量换行两次:"{{$key}}"

在此处阅读更多内容:http://www.php.net/manual/en/language.types.string.php#language.types.string.parsing

答案 1 :(得分:1)

是。它确实有助于解决变量名称。看看this question

{}可以使用如下:

$test = "something {$foo->awesome} value.";

顺便说一句,您可以使用以下内容进一步改进代码(从而避免您现在遇到的情况):

$output = file_get_contents($this->file);
$output = str_replace(array_keys($this->values), $this->values, $output);