我正在编写一个简单的模板系统,用于在服务器上运行动态查询。
我最初在我的模板类中有以下代码:
$output = file_get_contents($this->file);
foreach ($this->values as $key => $value) {
$tagToReplace = "{$key}";
$output = str_replace($tagToReplace, $value, $output);
}
我注意到字符串没有像我预期的那样被替换('{}'字符仍留在输出中。)
然后我将“违规”行更改为:
$tagToReplace = '{'."$key".'}';
然后按预期工作。为什么这种变化是必要的?解释字符串中的“{”在PHP中是否具有特殊意义?
答案 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);