2012-01-24 4 views
0

Я пишу тривиальную систему шаблонов для запуска динамических запросов на сервере.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?

ответ

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

Да. Это помогает разрешать имена переменных. Взгляните на this question.

{ и } может использоваться следующим образом:

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

Кстати, вы можете дополнительно улучшить свой код, используя следующий (и, таким образом, избежать ситуации, у вас возникли прямо сейчас):

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

вы забыли анонимную функцию для обертывания ключей в {}! – meze

Смежные вопросы