2012-01-24 3 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\}")をエスケープするか、変数を2回ラップすることができます。"{{$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