2011-07-06 32 views
0

可能重複:
curly braces in string{}標籤在PHP中做什麼?

跨越這段代碼就來了,這讓我感到好奇......

$msg .= "–{$mime_boundary}–n"; 

的$ mime_boundary VAR先前指定到以字符串形式輸出。

做了一個快速測試....

$var = "XmytextX"; 
$str ="some wrapper{$var}end of"; 
echo $str; 

,它確實不會輸出到字符串。我從來沒有見過這種輸出var的方式。

找不到任何文檔 - 任何人都可以啓發我嗎?

+1

思考的PHP會怎麼看你的「快速測試」如果'{}'WASN沒有用過:'...包裝$ varend of'。如果你沒有一個名爲'$ varend'的變量,你只會得到......的包裝。 –

+0

此問題已在另一篇文章中得到解答。鏈接如下:單擊以下鏈接:http://stackoverflow.com/questions/2596837/curly-braces-in-string – 2011-07-06 14:36:39

回答

5

所以,通常情況下,你可以使用雙引號來輸出任何變量,像這樣:

echo "Hello, $name"; 

但是,如果你想要的輸出項目內的陣列?

echo "Hello, $row['name']"; 

這是行不通的。所以,你會用花括號中的變量編譯器告訴interpolate整個變量:

echo "Hello, {$row['name']}"; 

關於這一點,你也可以使用對象使用它:

echo "Hello, {$row->name}"; 

希望幫助!

+0

每天學習新東西!非常感謝,也非常感謝所有其他受訪者(這是一個簡單的呃?) –

+0

我認爲這個答案更好地解釋它:http://stackoverflow.com/questions/2596837/curly-braces-in-string/2596838 #2596838 – hakre

3

花括號從文本的其餘部分設置變量名稱,允許您避免使用空格。

例如,如果你刪除的大括號,PHP引擎將不承認$mime_boundary如下面的語句的變量:

$msg .= "–$mime_boundary–n"; 

通過封裝在大括號的變量,你告訴PHP引擎處理該變量並返回其值。

+0

這種特殊情況很愚蠢,因爲在變量名稱中找不到'-' 。 –

2

這是爲了消除歧義:在你的情況下,如果你寫了"some wrapper $vared of",很明顯PHP會試圖把那裏的值設爲$vared,這不是你想要的。

1

它與變量插值有關。

This is explained in the manual(在「複雜(捲曲)語法」下)。我很好奇爲什麼如果你在PHP中工作,你還沒有閱讀它。

+0

我從來沒有用PHP那種輸出變量的方式。 Tbh我並不特別喜歡這種方法 - 我更喜歡使用。連接,因爲我可以清楚地看到我有哪些變量 –

+0

@Doug:我也更喜歡串聯,主要是出於同樣的原因。我並不介意像最懶惰的插值方法(''lol $ cats hi mom !! 1「')那樣的捲曲語法,因爲它更加明確,我的語法高亮顯示可以處理它。 –

1

如果你看看http://php.net/manual/en/language.types.string.php,你會發現它只是在字符串中嵌入一個變量的另一種方式,它只是允許你定義變量末尾的位置。

例如:

$var = "Animal" 
echo "The {$var}s"; //Outputs "The Animals" 
4

它被稱爲變量插值。事實上,你根本不需要{}。這也將工作:

echo "The value of my var is $var"; 

但是,如果你需要一個更復雜的可變輸出有時只能用{}工作。例如:

echo "This is a {$very['long']['and']['complex']['variable']}"; 

另請注意,變量插值僅適用於帶雙引號的字符串!所以這是行不通的:

echo 'this is my $var'; 
// outputs: this is my $var 
2

花括號讓你指定字符串的哪一部分應該被內插。

考慮$str ="some wrapper{$var}end of"; 經文$str ="some wrapper$varend of";

它們還允許您直接插入數組元素和類變量轉換成字符串

$str = "foobar $foo['bar']"; // parse error 
$str = "foobar {$foo['bar']}"; 
$str = "this is my {$foo->bar[1]}";